iOS                
            UIViewController
        
        
            
    Sök…
Subclassing
 UIControl ger oss tillgång till följande metoder: 
-  beginTrackingWithTouchkallas när fingret först rör sig ner inom kontrollens gränser.
-  continueTrackingWithTouchkallas upprepade gånger när fingret glider över kontrollen och även utanför kontrollens gränser.
-  endTrackingWithTouchkallas när fingret lyfter från skärmen.
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
Så här är visningskontrollern inställd för att vara delegat och svara på beröringshändelser från vår anpassade kontroll.
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"
    }
}
anteckningar
- Alternativa metoder för att uppnå samma resultat utan underklassering inkluderar att lägga till ett mål eller använda en gestigenkännare. 
- Det är inte nödvändigt att använda en delegat med dessa metoder om de bara används inom den anpassade kontrollen. Vi kunde precis ha lagt till ett - printuttalande för att visa hur händelserna kallas. I så fall skulle koden förenklas till- 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") } }
Skapa en instans
Snabb
let viewController = UIViewController()
Objective-C
UIViewController *viewController = [UIViewController new];
Ställ in vyn programmatiskt
Snabb
class FooViewController: UIViewController {
  override func loadView() {
    view = FooView()
  }
}
Instantiate från ett Storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
Med en identifierare :
Ge scenen ett Storyboard-ID inom identitetsinspektören på storyboard.
Instantiate in code:
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"myIdentifier"];
Instantera en första visningskontroller :
Välj storykontrollen i storyboard och välj sedan attributinspektören, kryssa i rutan "Är första visningskontroller".
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *controller = [storyboard instantiateInitialViewController];
Öppna behållarens vykontroll
När visningskontrollern presenteras i en tabbfältkontroller kan du komma åt tabbfältkontrollern så här:
Snabb
let tabBarController = viewController.tabBarController
Objective-C
UITabBarController *tabBarController = self.tabBarController;
När visningskontrollern är en del av en navigationsstack kan du komma åt navigeringsstyrenheten så här:
Snabb
let navigationController = viewController.navigationController
Objective-C
UINavigationController *navigationController = self.navigationController;
Lägga till / ta bort en kontroll av barnvyn
Så här lägger du till en kontroller för barnvy:
- (void)displayContentController:(UIViewController *)vc {
   [self addChildViewController:vc];
   vc.view.frame = self.view.frame;
   [self.view addSubview:vc.view];
   [vc didMoveToParentViewController:self];
}
Så här tar du bort en barndisplaykontroll:
- (void)hideContentController:(UIViewController *)vc {
   [vc willMoveToParentViewController:nil];
   [vc.view removeFromSuperview];
   [vc removeFromParentViewController];
}

