【问题标题】:Add Selector to UIButton将选择器添加到 UIButton
【发布时间】:2012-05-25 17:32:44
【问题描述】:

我有ViewController,然后是两个不同的ViewControllers,它们扩展了主要的ViewController,一个用于iPhone,另一个用于iPad。

iPad 的ViewController 实例化一个单独的扩展UIView 并将其设置为自己的视图。该视图有一些按钮,我想将其选择器方法添加为主要ViewController 中的一些方法。如何实现?

所以这是一种可视化的方法:

Main ViewController
| iPhone ViewController
| iPad ViewController
  | Some UIView Class    --> Button must invoke method in Main View Controller

编辑: 我根本不使用界面生成器。

【问题讨论】:

    标签: iphone objective-c ipad uiview uibutton


    【解决方案1】:

    您的问题有点令人困惑,但如果我理解,您可以使用这样的代码来设置按钮:

    [button addTarget:yourObject action:@selector(yourMethod:) forControlEvents:UIControlEventTouchUpInside];
    

    因此,您将 addTarget 设置为 MainViewController 的实例,并将 action 设置为您要在 MainViewController 中调用的任何方法。只要您的方法接受IBAction,您也应该能够在 Interface Builder 中执行此操作。

    【讨论】:

    • addTarget 应该是你的 ipad viewcontroller 的一个实例,这样就完美了
    • 如何创建yourObject?它是该视图最终所在的 VC。在这种情况下,我不能这样做:ThisVC *vc = [ThisVC alloc] init],因为它已经被创建了。我需要一种从 UIView 引用主视图控制器的方法。 UIView 不是在 iPad 的视图控制器中创建的,而是在不同的类中创建的(请参阅下面的评论)。
    • 您应该在您的应用程序委托(或您认为合适的任何地方)中创建一个属性来保存指向该视图控制器的指针。因此,在您的应用程序委托 .h 文件中,输入:@property (nonatomic, retain) UIViewController *myViewContoller; 并在您创建视图控制器时进行设置。比你总是可以找到你的应用程序委托并找到这样的视图控制器:[(AppDelegate *)[[UIApplication sharedApplication] delegate] myViewController];
    • 一般你的对象是“self”
    【解决方案2】:

    除非我误解了这个问题,否则没有什么诀窍。

    如果您在主视图控制器中定义(IBAction)buttonPressed:(id)sender,它会被 iPad 视图控制器子类继承。因此,当 iPad 视图控制器设置其按钮时,将其指定为属于 self 的选择器应该可以正常工作。

    【讨论】:

    • 抱歉忘记说明了,我根本不用界面生成器。
    • 这应该对继承逻辑没有影响。如果按钮是在控制器代码中定义的,addTarget: 方法仍然可以指定self 和超类中的选择器。
    • 哦 - 该按钮不在 iPad 的视图控制器的类中。它位于一个 UIView 类中,该类在继承主视图控制器的 iPad 视图控制器中初始化(并设置为 self.view)。所以UIView 是一个不同的类,它扩展了自定义UIView
    • 在这种情况下,我将为自定义 UIView 创建一个自定义初始化程序,以便我可以传递视图控制器引用并将其用作按钮的目标。 (或者,如果我真的有野心,创建一个“MyButtonDelegate”协议。)
    • 我找到了一种将它放入 iPad 的视图控制器的方法,从而省去了所有的麻烦。使用您上面的建议,仅提及self,它说它找不到该选择器方法。虽然方法在 iPad 的 VC 超级 VC 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多