如何创建类似于分割视图的控件 本帖最后由 caulxjxys 于 2013-12-14 09:07:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自定义一个view 中间是显示数字的label 左右两边两个button 内部或者交给外部处理数据看这个程序需求 不好意思,这个图给的有误导作用,不是红圈里面的控件,我指的是左侧显示“冷菜类”,“海鲜类”,等等的tab,而且是根据程序中解析的内容动态显示的那种;右侧根据点击各个不同的tab,显示不同的view。 左侧一个tabView,右侧一个containerView,点击哪个item,先把之前container上的子视图remove掉然后将新的要显示的视图加载到container上。小三角形显示到当前点击的按钮就好。 给你个思路:按职责分离的原则,建议左边菜单分离出一个自定义控件。该控件主要的功能是在点击某个菜品类时,能知道当前菜品的信息,并将这个动作及数据传递到它的“发送者”端。所以这个控件需要设置一个“代理”假设如下的菜单的实体@interface MenuItem:NSObject@property (nonatomic) NSInteger MenuID;@property (strong) NSString *MenuName; @end这个代理协议需要在点击某个菜品类时需要传递的数据,应该有菜单索引,及菜单实体@protocol MenuItemDelegate: <NSObject>-(void)menuItemDidSelected:(MenuItem *)item index:(NSInteger)index;@end这个控件大体应该这样@protocol MenuItemDelegate@class MenuItem;@interface LeftMenuControl:UIView@property (strong) NSMutableArray *items; /////store all of the menu item@property (nonatomic,weak) id<MenuItemDelegate> delegate;@end在它的实现文件中应该这样@implementation LeftMenuControl////当其中某个menu的button被选中时的事件处理-(void)menuSelected:(id)sender { UIButton *menuBtn=(UIButton *)sender; NSInteger index=menuBtn.tag; if ([self.delegate isRespondToSelector:@selector(menuItemDidSelected:index:)]) { [self delegate menuItemDidSelected:[self.items objectAtIndex:index] index:index]; }}@end 接上文创建显示如你图对应的控制器 SelectMenuViewController#import "LeftMenuControl"@interface SelectMenuViewController:UIViewController <MenuItemDelegate>@property (strong) LeftMenuControl *leftMenu;@end--------------------实现---------------------#import "MenuItem"@implementation SelectMenuViewController-(void)viewDidLoad { leftMenu=[[LeftMenuControl alloc] initWithFrame:.....]; NSMutableArray *items=@{@{MenuID:1,MenuName:@"冷菜类"},@{MenuID:2,MenuName:@"海鲜类"}}; ////此处省略300字 [leftMenu setItems:items]; [leftMenu setDelegate:self]; ////设置代理 }//////在控制器中实现协议方法-(void) menuItemDidSelected:(MenuItem *)item index:(NSInteger)index { NSLog("you selected menu is :%@ at index:%d",[item description] , index);}@end 重写tabbar就可以了 code4app上 这样的DEMO一大把....... 弱弱的问一个代理问题 主程序和动态库共享全局变量问题 warning: assignment makes pointer from integer without a cast NSDecimal 保留2位小数 苹果apps开发,只有证书怎样真机调试 想买个Mac mini做游戏开发 是第一响应不灵么 保存照片时如何使用自定义名称或者保存后获取系统定义的照片名字 求助,iOS如何实现图文混排? 使用第三方库时出错 这种一般是什么问题呢 这和线程有关吗
左侧一个tabView,右侧一个containerView,点击哪个item,先把之前container上的子视图remove掉然后将新的要显示的视图加载到container上。小三角形显示到当前点击的按钮就好。
按职责分离的原则,建议左边菜单分离出一个自定义控件。该控件主要的功能是在点击某个菜品类时,能知道当前菜品的信息,并将这个动作及数据传递到它的“发送者”端。所以这个控件需要设置一个“代理”
假设如下的菜单的实体
@interface MenuItem:NSObject
@property (nonatomic) NSInteger MenuID;
@property (strong) NSString *MenuName;
@end这个代理协议需要在点击某个菜品类时需要传递的数据,应该有菜单索引,及菜单实体@protocol MenuItemDelegate: <NSObject>
-(void)menuItemDidSelected:(MenuItem *)item index:(NSInteger)index;
@end这个控件大体应该这样
@protocol MenuItemDelegate
@class MenuItem;
@interface LeftMenuControl:UIView
@property (strong) NSMutableArray *items; /////store all of the menu item
@property (nonatomic,weak) id<MenuItemDelegate> delegate;
@end在它的实现文件中应该这样
@implementation LeftMenuControl////当其中某个menu的button被选中时的事件处理
-(void)menuSelected:(id)sender {
UIButton *menuBtn=(UIButton *)sender;
NSInteger index=menuBtn.tag;
if ([self.delegate isRespondToSelector:@selector(menuItemDidSelected:index:)]) {
[self delegate menuItemDidSelected:[self.items objectAtIndex:index] index:index];
}
}
@end
@interface SelectMenuViewController:UIViewController <MenuItemDelegate>@property (strong) LeftMenuControl *leftMenu;
@end--------------------实现---------------------
#import "MenuItem"
@implementation SelectMenuViewController-(void)viewDidLoad {
leftMenu=[[LeftMenuControl alloc] initWithFrame:.....];
NSMutableArray *items=@{@{MenuID:1,MenuName:@"冷菜类"},@{MenuID:2,MenuName:@"海鲜类"}}; ////此处省略300字
[leftMenu setItems:items];
[leftMenu setDelegate:self]; ////设置代理
}//////在控制器中实现协议方法
-(void) menuItemDidSelected:(MenuItem *)item index:(NSInteger)index {
NSLog("you selected menu is :%@ at index:%d",[item description] , index);
}
@end