如何解决使用自定义组件:子类UIView或UIViewController?
| 我正在研究UISegmentedControl的自定义实现。 我想创建一个能够接收配置数据并从中获得类似于UISegmentedControl的自定义视图的组件。 我开始对UIView进行子类化,并可以使用以下代码创建自定义UISegmentedControl:CustomSegment *segment = [[CustomSegment alloc]
initWithTitles:[NSArray arrayWithObjects:@\"one\",@\"two\",nil]];
[self.window addSubview:segment];
但是现在,我想改进我的课程,并向其中添加更多可自定义的参数。
例如,我想添加一个自定义的分隔符,定义按钮字体,等等...这是我的疑问:
在UIView子类上工作更好还是您建议我对UIViewController进行子类化,在该类中我可以使用-(void)loadView
和-(void)viewDidLoad
之类的方法管理View层次结构?
在一个简单的UIView子类中,当我启动自定义init方法时,我会立即设置子视图...使用UIViewController时,我可以调用自定义init并定义如何将我的子视图构建到-(void)loadView中。
解决方法
不要使用UIViewController,只需像您一样扩展UIView类,并继续扩展其功能。
请记住将指针保存到您添加的每个子视图(即按钮),以便以后可以访问它们。
定义自定义设置器,例如,用于更改按钮标签标题的自定义设置器为:
- (void) setButton1Title:(NSString*)str forState:(UIControlState)state{
//You can add some control here
if ([str length] > 20) return;
[_button1 setTitle:str forState:state]; //_button1 is my reference to the button
}
等等。不要直接访问您的子视图,而应使用方法。
另外,您可以使用\“ layoutSubviews \”方法来定义视图如何在自定义视图中显示。
希望对您有帮助。
编辑:就您而言,我看不到为什么使用lauoutSubviews方法,但我想向您展示我想说的话。
可以说,例如,我需要创建一个UIView类来表示我的应用程序中的\“ Contact \”对象。
这就是我要做的:
@interface ContactView : UIView{
UILabel* _nameLabel;
UILabel* _ageLabel;
Contact* _contact;
}
@property (retain) Contact* contact;
@end
@implementation ContactView
@synthetize contact = _contact;
-(id)initWithContact:(Contact*)c{
self = [super init];
if (self) {
_nameLabel = [[UILabel alloc] init];
_nameLabel.frame = CGRectZero;
[self addSubview:_nameLabel];
[_nameLabel release];
_ageLabel = [[UILabel alloc] init];
_ageLabel.frame = CGRectZero;
[self addSubview:_ageLabel];
[_ageLabel release];
self.contact = c;
}
}
- (void) layoutSubviews{
[super layoutSubviews];
_nameLabel.frame = CGRectMake(0.0f,0.0f,200.0f,25.0f);
_ageLabel.frame = CGRectMake(0.0f,25.0f,25.0f);
if (self.contact){
_nameLabel.text = self.contact.name;
_ageLabel.text = self.contact.age;
}else{
_nameLabel.text = @\"Unavailable\";
_ageLabel.text = @\"Unavailable\";
}
}
- (void) setContact:(Contact*)c{
self.contact = c;
[self layoutSubviews];
}
@end
查看如何使用“ layoutSubiews \”为标签设置正确的帧和数据。
通常,在创建自定义UITableViewCells时必须使用很多视图,因此我经常使用它。
让我知道我是否感到困惑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。