iOS:从单独的viewController调用方法

时间:2012-08-28 16:43:27

标签: ios

在我的主视图控制器中,我有一个调用弹出窗口的按钮。由于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'

知道我做错了什么吗?感谢

3 个答案:

答案 0 :(得分:1)

删除此行,不想创建视图控制器的新实例

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];

答案 1 :(得分:1)

这是使用委托协议的好地方。在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];

答案 2 :(得分:0)

首先,要回答您的问题,您可能需要在ViewController.h文件中定义generateHash方法。

其次,我建议你的设计方法不是最优的。 generateHash方法可能需要在另一个可以从ViewController和Popover内容控制器中调用的文件中。例如,考虑另一个目标-c .h / .m对“MyHashMethods”:

    MyHashMethods.h

    + (void)generateHash;

    MyHashMethods.m

    + (void) generateHash
    {
         // hash code
    }

这将允许您在您需要的任何视图控制器中包含MyHashMethods.h然后调用

    [MyHashMethods generateHash];

当你需要它时。