在我的应用中,我有一个与我想要显示的用户对应的标签列表。标签应该有一个文本字段和右侧的按钮来删除标签(就像问题时这个网站上的标签很像!)
我只希望标签的一部分是可点击的,所以我不想在UIButton中放置UILabel,似乎将UIButton添加到UILabel是不好的做法。创建此对象的最佳方法是什么? 我想要类似于UITableViewCell的东西,但不是UITableViewCell,因为它不会显示在表格视图中。
答案 0 :(得分:1)
只是要创建一个UIView
子类,我们可以将其命名为TagView
,让UILabel
和UIButton
显示,并且不要忘记创建代理行动响应的协议。
也许是这样的。
@protocol TagViewDelegate
@optional
- (void)didSelectedTagView:(TagView *)tagView;
- (void)didTagViewAccessoryButtonTapped:(TagView *)tagView;
@end
@interface TagView : UIView
{
UILabel *label;
UIButton *accessoryButton;
}
@property (weak, nonatomic) id delegate;
@property (readonly, nonatomic) UILabel *label;
@end
然后为按钮
实现标签和touchUpInside事件的UITapGestureRecognizer
- (void)initUIElement {
// give it a gestureRecognizer for label to response the label did select
UITapGestureRecognizer *labelTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didSelectedLabel:)];
[label addGestureRecognizer:labelTapGR];
[accessoryButton addTarget:self action:@selector(accessoryTapped:) forControlEvents:UIControlEventTouchUpOutside];
}
方法didSelectedLabel:
和accessoryTapped:
中的,像这样回复tagView的委托。
- (void)didSelectedLabel:(UITapGestureRecognizer *)gestureRecognizer
{
[self.delegate didSelectedTagView:self];
}
- (void)accessoryTapped:(id)sender
{
[self.delegate didTagViewAccessoryButtonTapped:self];
}
您可以查看图书馆。
答案 1 :(得分:0)
就像cabellicar123所说,使用UIView
并将UILabel
和UIButton
放入其中。你有几种方法可以做到这一点。
首先,您可以创建一个主视图为UIView的XIB文件,然后只需拖动UIButton
和UILabel
并按照您想要的方式放置它们,然后在代码加载中你需要它时的笔尖。
其次是以编程方式创建此UIView
,并使用addSubview
方法并以此方式添加UILabel
和UIButton
。如果您使用此方法,请确保已使用initWithFrame
定义了这两个子视图,以便将它们正确放置在UIView
内。我的意思是这些视图的原点应该相对于UIView
的左上角。