Iphone 制作自定义UISegmentControl(有点)

Iphone 制作自定义UISegmentControl(有点),iphone,objective-c,uiview,menu,custom-controls,Iphone,Objective C,Uiview,Menu,Custom Controls,我有一个模型: 正如你所看到的,这是一种导航菜单。它的功能应该与分段控件相同,我将根据活动项更改tableView 实现这一点最简单的方法是什么 我已经开始创建UIView子类,但发现我必须创建一个委托,监视tap事件和其他内容。 这是最好的方法吗我是否应该将UISegmentedControl子类化? 还有其他建议吗? 请给我指一下正确的方向。我对Obj-c很有信心,但是做这些东西会让我的头脑发狂。从概念上讲,UISegmentedControl似乎是一个不错的选择,但我认为它不够灵活,无法

我有一个模型:

正如你所看到的,这是一种导航菜单。它的功能应该与分段控件相同,我将根据活动项更改tableView

实现这一点最简单的方法是什么

我已经开始创建UIView子类,但发现我必须创建一个委托,监视tap事件和其他内容。 这是最好的方法吗我是否应该将UISegmentedControl子类化?

还有其他建议吗?


请给我指一下正确的方向。我对Obj-c很有信心,但是做这些东西会让我的头脑发狂。

从概念上讲,
UISegmentedControl
似乎是一个不错的选择,但我认为它不够灵活,无法创造出你想要的效果

您是否考虑过在自定义视图中放置三个
ui按钮
控件?您可以使用
setBackgroundImage:forState:
自定义每个按钮的图像,以获得实体模型中的边框样式。将按下按钮的
selected
属性设置为
YES
,然后
ui按钮将为您处理图形

您可以设置一个动作方法,通过调用来检测按下了哪个按钮

[button addTarget:self action:@selector(nameOfMethodToHandleButtonPress) forControlEvents:UIControlEventTouchUpInside])]
委托只是符合您创建的协议的任何类。因此,您可以在标头中创建一个委托协议,如下所示:

@class MyControl; // this is a forward reference to your class, as this must come before the class @interface definition in the header file

@protocol MyControlDelegate <NSObject>

@optional
- (void)myControl:(MyControl *)control didSelectButton:(int)buttonIndex; // replace this method with whatever makes sense for your control

@end
在按钮按下处理程序中,例如:

- (void)methodThatHandlesButtonPress { // this is the method you set up in the first code example with addTarget:action:forCotnrolEvents:
    if ([self.delegate respondsToSelector:@selector(myControl:didSelectButton:)])
        [self.delegate myControl:self didSelectButton:0]; // replace as appropriate
}
现在,您只需让包含控件的视图控制器采用以下协议:

@interface MyViewController : UIViewController <MyControlDelegate> { // etc...

从概念上讲,
UISegmentedControl
似乎是一个很好的选择,但我认为它不够灵活,无法创建您想要的效果

您是否考虑过在自定义视图中放置三个
ui按钮
控件?您可以使用
setBackgroundImage:forState:
自定义每个按钮的图像,以获得实体模型中的边框样式。将按下按钮的
selected
属性设置为
YES
,然后
ui按钮将为您处理图形

您可以设置一个动作方法,通过调用来检测按下了哪个按钮

[button addTarget:self action:@selector(nameOfMethodToHandleButtonPress) forControlEvents:UIControlEventTouchUpInside])]
委托只是符合您创建的协议的任何类。因此,您可以在标头中创建一个委托协议,如下所示:

@class MyControl; // this is a forward reference to your class, as this must come before the class @interface definition in the header file

@protocol MyControlDelegate <NSObject>

@optional
- (void)myControl:(MyControl *)control didSelectButton:(int)buttonIndex; // replace this method with whatever makes sense for your control

@end
在按钮按下处理程序中,例如:

- (void)methodThatHandlesButtonPress { // this is the method you set up in the first code example with addTarget:action:forCotnrolEvents:
    if ([self.delegate respondsToSelector:@selector(myControl:didSelectButton:)])
        [self.delegate myControl:self didSelectButton:0]; // replace as appropriate
}
现在,您只需让包含控件的视图控制器采用以下协议:

@interface MyViewController : UIViewController <MyControlDelegate> { // etc...

这就是我现在正在编写的代码。但我真的不明白我如何能够检测到按下了哪个按钮,然后实现一个代理将所选项目发送到主viewController?说真的。你是上帝。如果我能投上一百票,我会投的。非常感谢。这就是我现在正在编写的代码。但我真的不明白我如何能够检测到按下了哪个按钮,然后实现一个代理将所选项目发送到主viewController?说真的。你是上帝。如果我能投上一百票,我会投的。非常感谢。