如何在UIKIt中构建自定义控件?

时间:2009-04-05 03:48:00

标签: iphone cocoa-touch

我的UIView子类处理触摸事件并在触摸开始和跟踪发生时更新内部值。

我的视图控制器在屏幕上加载此自定义视图。设置我的视图控制器以监听自定义控件的值更改的最佳方法是什么?

1 个答案:

答案 0 :(得分:8)

你可以:

  1. 在您的控制器中实施委托方法,并从您的视图中调用它们,或
  2. 改为子类UIControl并将UIControlEvent发送到您的控制器
  3. 当值发生变化时(或者更确切地说,当用户与您的控件交互时)。

    如果您的视图用于从用户那里获得某种形式的输入,那么子类化UIControl是一种更好的方法。

    来自iPhone参考资料库:

      

    UIControl是控件的基类:按钮和滑块等对象,用于将用户意图传达给应用程序。

    因此,UIViewUIControl之间最重要的区别在于是否传达了用户意图。 UIView用于显示信息,而UIControl用于收集用户输入。

    <强>更新

    如果你决定使用委托模式,那么代码就是这样的:

    在自定义视图的界面中,像这样定义委托:

    @interface MyView : UIView {
        id delegate;
    }
    @property (assign) id delegate;
    @end
    

    @synthesize在实施中。

    在视图控制器中,将控制器设置为委托:

    MyView myView = [[MyView alloc] init];
    [myView setDelegate:self];
    

    然后,每当用户与视图交互时(例如在touchesBegan中),可能更改值,请在视图中执行此操作:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        // Possibly change the values
        if([delegate respondsToSelector:@selector(valuesChanged)]) {
            [delegate valuesChanged];
        }
    }
    

    您可能还想查看“可可基础指南”中的Delegates and Data Sources