簡體   English   中英

iOS:從單獨的viewController調用方法

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

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