खोज…


उपवर्गीकरण

उपकंट्रोलिंग UIControl हमें निम्न विधियों तक पहुँच प्रदान करता है:

  • beginTrackingWithTouch को कहा जाता है जब उंगली पहली बार नियंत्रण की सीमा के भीतर छूती है।
  • continueTrackingWithTouch को बार-बार उंगली को नियंत्रण में और यहां तक कि नियंत्रण की सीमा के बाहर भी कहा जाता है।
  • जब स्क्रीन से उंगली endTrackingWithTouch है, तो endTrackingWithTouch कहा जाता है।

MyCustomControl.swift

import UIKit

// These are out self-defined rules for how we will communicate with other classes
protocol ViewControllerCommunicationDelegate: class {
    func myTrackingBegan()
    func myTrackingContinuing(location: CGPoint)
    func myTrackingEnded()
}

class MyCustomControl: UIControl {

    // whichever class wants to be notified of the touch events must set the delegate to itself
    weak var delegate: ViewControllerCommunicationDelegate?
    
    override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
        
        // notify the delegate (i.e. the view controller)
        delegate?.myTrackingBegan()
        
        // returning true means that future events (like continueTrackingWithTouch and endTrackingWithTouch) will continue to be fired
        return true
    }
    
    override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
        
        // get the touch location in our custom control's own coordinate system
        let point = touch.locationInView(self)
        
        // Update the delegate (i.e. the view controller) with the new coordinate point
        delegate?.myTrackingContinuing(point)
        
        // returning true means that future events will continue to be fired
        return true
    }
    
    override func endTrackingWithTouch(touch: UITouch?, withEvent event: UIEvent?) {
        
        // notify the delegate (i.e. the view controller)
        delegate?.myTrackingEnded()
    }
}

ViewController.swift

यह है कि दृश्य नियंत्रक को प्रतिनिधि के रूप में स्थापित किया गया है और हमारे कस्टम नियंत्रण से घटनाओं को छूने का जवाब दिया गया है।

import UIKit
class ViewController: UIViewController, ViewControllerCommunicationDelegate {
    
    @IBOutlet weak var myCustomControl: MyCustomControl!
    @IBOutlet weak var trackingBeganLabel: UILabel!
    @IBOutlet weak var trackingEndedLabel: UILabel!
    @IBOutlet weak var xLabel: UILabel!
    @IBOutlet weak var yLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        myCustomControl.delegate = self
    }

    func myTrackingBegan() {
        trackingBeganLabel.text = "Tracking began"
    }
    
    func myTrackingContinuing(location: CGPoint) {
        xLabel.text = "x: \(location.x)"
        yLabel.text = "y: \(location.y)"
    }
    
    func myTrackingEnded() {
        trackingEndedLabel.text = "Tracking ended"
    }
}

टिप्पणियाँ

  • सबक्लासिंग के बिना एक ही परिणाम प्राप्त करने के वैकल्पिक तरीकों में एक लक्ष्य जोड़ना या एक इशारा पहचानकर्ता का उपयोग करना शामिल है।

  • इन विधियों के साथ एक प्रतिनिधि का उपयोग करना आवश्यक नहीं है यदि वे केवल कस्टम नियंत्रण के भीतर ही उपयोग किए जा रहे हैं। हम सिर्फ एक print स्टेटमेंट जोड़कर दिखा सकते हैं कि घटनाओं को कैसे बुलाया जा रहा है। उस स्थिति में, कोड को सरल बनाया जाएगा

      import UIKit
      class MyCustomControl: UIControl {
    
          override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
              print("Began tracking")
              return true
          }
      
          override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
              let point = touch.locationInView(self)
              print("x: \(point.x), y: \(point.y)")
              return true
          }
      
          override func endTrackingWithTouch(touch: UITouch?, withEvent event: UIEvent?) {
              print("Ended tracking")
          }
      }
    

एक उदाहरण बनाएँ

तीव्र

let viewController = UIViewController()

उद्देश्य सी

UIViewController *viewController = [UIViewController new];

प्रोग्राम को दृश्य रूप से सेट करें

तीव्र

class FooViewController: UIViewController {

  override func loadView() {
    view = FooView()
  }

}

एक स्टोरीबोर्ड से तुरंत

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

एक पहचानकर्ता के साथ :

स्टोरीबोर्ड की पहचान निरीक्षक के भीतर एक स्टोरीबोर्ड आईडी दृश्य दें।

यहाँ छवि विवरण दर्ज करें

कोड में झटपट:

UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"myIdentifier"];

एक प्रारंभिक दृश्य कंट्रौलर को त्वरित करें :

स्टोरीबोर्ड में दृश्य नियंत्रक का चयन करें, फिर विशेषता निरीक्षक का चयन करें, "इनिशियल व्यू कंट्रोलर" बॉक्स देखें।

यहाँ छवि विवरण दर्ज करें

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *controller = [storyboard instantiateInitialViewController];

कंटेनर दृश्य नियंत्रक तक पहुंचें

जब व्यू कंट्रोलर को टैब बार कंट्रोलर के भीतर प्रस्तुत किया जाता है, तो आप टैब बार कंट्रोलर को इस तरह एक्सेस कर सकते हैं:

तीव्र

let tabBarController = viewController.tabBarController

उद्देश्य सी

UITabBarController *tabBarController = self.tabBarController;

जब व्यू कंट्रोलर नेविगेशन स्टैक पर होता है, तो आप नेविगेशन कंट्रोलर को इस तरह एक्सेस कर सकते हैं:

तीव्र

let navigationController = viewController.navigationController

उद्देश्य सी

UINavigationController *navigationController = self.navigationController;

चाइल्ड व्यू कंट्रोलर जोड़ना / हटाना

चाइल्ड व्यू कंट्रोलर जोड़ने के लिए:

- (void)displayContentController:(UIViewController *)vc {
   [self addChildViewController:vc];
   vc.view.frame = self.view.frame;
   [self.view addSubview:vc.view];
   [vc didMoveToParentViewController:self];
}

चाइल्ड व्यू कंट्रोलर को हटाने के लिए:

- (void)hideContentController:(UIViewController *)vc {
   [vc willMoveToParentViewController:nil];
   [vc.view removeFromSuperview];
   [vc removeFromParentViewController];
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow