簡體   English   中英

當點擊帶有手勢的子視圖時,如何選擇另一個視圖控制器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM