iOS Subclassed UIView - 如何从ViewController获取UIButton调用方法?

时间:2012-09-13 16:55:57

标签: ios uiview methods uibutton

我有一个自定义的UIView,我用它来显示一个popover(在iPhone上)。在popover中有一些UIButtons,我需要从ViewController的类中调用方法(不是UIView的类,而是显示UIView的View)。

如何正确设置?

UIView按钮代码位于Custom UIView类:

    UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [logoutButton setTitle:@"Logout" forState:UIControlStateNormal];
    [logoutButton setFrame:CGRectMake(0, 0, content.frame.size.width, 44)];
    [logoutButton addTarget:self.superview.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside];
    [logoutButton setBackgroundImage:redImage forState:UIControlStateNormal];
    [logoutButton setBackgroundImage:redImageHighlight forState:UIControlStateHighlighted];
    [logoutButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [content addSubview:logoutButton];

3 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法是使用UIView子类中的委托模式在按下注销按钮时通知所有者。在viewcontroller中创建视图实例时,请将委托设置为self。

http://enroyed.com/ios/delegation-pattern-in-objective-c-and-writing-custom-delegates/

中结帐'撰写自定义代表'

无法以上述代码中尝试的方式访问连接到超级视图的ViewController。

或者,您可以发布通知。例如。发送应用程序范围的消息,指出应该执行注销。查看NSNotificationCenter了解如何执行此操作。

类似的东西:

[[NSNotificationCenter defaultCenter] postNotificationName:kShouldLogOutNotification object:nil];
编辑:您肯定希望在您的用例中使用委托。

答案 1 :(得分:0)

这种事情通常是通过委托完成的,这是UIKit中使用频繁的设计模式。请参阅:What is the purpose of an iOS delegate?

答案 2 :(得分:0)

好的,我确实相信创建自定义委托是处理此问题的正确方法。 但是,我确实发现这种方法正常工作(不确定它是否“正确”)

[logoutButton addTarget:self.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside];

这似乎告诉按钮使用它的superview(UIView)的类(ViewController)。 再次,不确定这是否是从主视图控制器调用方法的正确/正确方法,但它没有问题,因此它似乎可用。