![](/img/trans.png)
[英]Unable to display view when I call it from a separate ViewController in iOS
[英]iOS: call method from a separate viewController
在我的主視圖控制器中,我有一個調用彈出窗口的按鈕。 由於popover有它自己的視圖控制器,它的按鈕調用popover的視圖控制器中的方法。 但是我如何從主視圖控制器調用方法?
我試過這個。 在popover視圖控制器中,我在.h中添加了一個屬性
@class ViewController;
@interface PopoverContent : UIViewController <UITextFieldDelegate>
...
@property (strong, nonatomic) ViewController *parentView;
在我的popover實現中,我在viewDidLoad中執行了此操作:
self.parentView = [[ViewController alloc] initWithNibName:nil bundle:nil];
在ViewController中,我有一個名為generateHash的方法,所以我試過了
[parentView generateHash];
但我得到錯誤:
No visible @interface for 'ViewController' declares selector 'generateHash'
知道我做錯了什么嗎? 謝謝
刪除此行,不想創建視圖控制器的新實例
self.parentView = [[ViewController alloc] initWithNibName:nil bundle:nil];
改變這一行
@property (strong, nonatomic) ViewController *parentView;
為此,您的父視圖指針屬於正確的類類型
@property (weak) ParentView *parentView;
現在在父視圖.m文件中
- (void) createPopup
{
PopoverView *popoverV = [[PopoverView alloc] init];
popoverV.parentView = self;
//And some command to show your popup, addSubview, or presentModal, or whatever
}
然后在PopoverView.m文件中,您可以像這樣調用parentView的方法
[self.parentView SomeMethod];
這是使用委托協議的好地方。 在PopoverContent.h中,添加如下內容:
@protocol PopoverContentDelegate : NSObject
- (void) method1;
@end
當然,您可以使用多個方法,並且方法可以返回值並像任何其他方法一樣獲取參數。 此外,在同一文件中,添加名為delegate
屬性。 (從技術上講,它可以被稱為任何東西,但是如果你將代碼命名為代理,那么查看代碼的每個人都會知道你正在做什么。)
@interface PopoverContent
@property (weak) id<PopoverContentDelegate > delegate;
//other properties and methods
@end
最后,在“main”視圖控制器的.m文件中,導入PopoverContent.h文件並將委托設置為self。 同時實現method1來做你需要做的事情。
//Create the view controller
myPopoverContentController.delegate = self;
//Create the popover with the view controller.
現在,在PopoverContent控制器中,您可以根據需要在委托上調用method1。
[delegate method1];
首先,要回答您的問題,您可能必須在ViewController.h文件中定義generateHash方法。
其次,我建議你的設計方法不是最優的。 generateHash方法可能需要在另一個可以從ViewController和Popover內容控制器中調用的文件中。 例如,考慮另一個目標-c .h / .m對“MyHashMethods”:
MyHashMethods.h
+ (void)generateHash;
MyHashMethods.m
+ (void) generateHash
{
// hash code
}
這將允許您在您需要的任何視圖控制器中包含MyHashMethods.h然后調用
[MyHashMethods generateHash];
什么時候需要它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.