iOS
UIViewController
サーチ…
サブクラス化
UIControl
をサブクラス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()
目標-C
UIViewController *viewController = [UIViewController new];
プログラムでビューを設定する
迅速
class FooViewController: UIViewController {
override func loadView() {
view = FooView()
}
}
ストーリーボードからインスタンス化する
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
識別子付き :
ストーリーボードのアイデンティティインスペクタ内でストーリーボードIDをシーンに与えます。
コードでインスタンス化する:
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"myIdentifier"];
最初のviewcontrollerをインスタンス化する :
ストーリーボード内でView Controllerを選択し、属性インスペクタを選択して、「Is Initial View Controller」チェックボックスをオンにします。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *controller = [storyboard instantiateInitialViewController];
コンテナビューコントローラにアクセスする
ビューコントローラがタブバーコントローラ内に表示されると、次のようにタブバーコントローラにアクセスできます。
迅速
let tabBarController = viewController.tabBarController
目標-C
UITabBarController *tabBarController = self.tabBarController;
ビューコントローラがナビゲーションスタックの一部である場合、次のようにナビゲーションコントローラにアクセスできます。
迅速
let navigationController = viewController.navigationController
目標-C
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