![](/img/trans.png)
[英]How to load a xib file from another controller without segue and not as a subview
[英]How to segue to another view controller when a subview with a gesture is tapped?
我有一個帶有子視圖的視圖控制器:gestureView,該視圖控制器是通過插座引用的。 我已經將父視圖控制器的viewDidLoad中的輕擊手勢分配給了gestureView,如下所示:
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self.gestureView action:@selector(handleTap)];
[self.gestureView addGestureRecognizer:tapGesture];
gestureView使用自定義類,其中實現了handleTap:,並且工作正常,我可以從gestureView的handleTap:進行日志記錄,但是,當輕按gestureView時,如何執行從當前視圖控制器到另一個視圖控制器的排序。
我了解可能有更簡單的方法來執行此操作,但這對我的情況最有效。
您可以使用代理模式或通知模式。 兩種情況都可以使用,因為-handleTap()方法在子視圖中實現,因此可以在子視圖類中創建協議 。 當您獲得handleTap方法時,您可以調用應該在您的父類中實現的委托方法。
在您的子視圖類中, 在類聲明上方定義協議
@protocol SubViewClassDelegate <NSObject>
@required;
- (void) subviewDidTapped:(id) sender;
@end
定義委托的屬性。
@property (nonatomic, unsafe_unretained) id<SubViewClassDelegate> delegate;
在子視圖的類調用委托方法的實現文件中。
- (void) handleTap {
if ([self.delegate respondsToSelector:@selector(subviewDidTapped:)]) {
[self.delegate subviewDidTapped:yourObject]; // in yourObject you can pass data if require.
}
}
在您的父類中實現的子視圖類的委托
@interface ParentViewController : UIViewController <SubViewClassDelegate>
在viewDidLoad中
self.gestureView.delegate = self;
並在Parent控制器中實現Subview類的委托方法。
-(void) subviewDidTapped:(id)sender {
// Navigate using performSegueWithIdentifier:
[self performSegueWithIdentifier: @"segueIdentifier" sender: self];
}
在handleTap
,對接下來要顯示的另一個視圖控制器執行搜索。
[self performSegueWithIdentifier: @"YOU_SEGUE_IDENTIFIER" sender: self];
您將要執行的Segue是情節提要中從當前視圖控制器到下一個視圖控制器的序列。 (您需要創建此)。
一旦通過檢查segue標識符確定它是正確的發送者,就可以將參數傳遞給prepareForSegue:sender:
的下一個視圖控制器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.