2014-08-15 3 views
0

В моем приложении у меня есть список тегов, соответствующих пользователю, который я хотел бы отображать. Тег должен иметь текстовое поле и кнопку справа, чтобы удалить тег (так же, как теги на этом сайте при задании вопроса!)Отображение пользовательского тега с UILabel и UIButton

Я хочу, чтобы часть тега была доступна для кликов, поэтому я не хотят размещать UILabel внутри UIButton, и кажется, что добавление UIButton в UILabel - это плохая практика. Каков наилучший способ создания этого объекта? Я хочу что-то похожее на UITableViewCell, но не на UITableViewCell, потому что он не будет отображаться в виде таблицы.

+1

Создайте подкласс 'UIView' с' UILabel' и 'UIButton'. – carloabelli

ответ

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 

Затем реализовать UITapGestureRecognizer для этикетки и touchUpInside события для кнопки

- (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]; 
} 

Существует библиотека, на которой вы можете взглянуть.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Dijkgraaf

+0

@Dijkgraaf Я обновил свой ответ, спасибо вашему сообщению. – GreenChiu

0

Как cabellicar123 сказал, используйте UIView и поместите UILabel и UIButton внутри него. У вас есть несколько способов сделать это.

Во-первых, вы можете сделать XIB файл с основной вид был вашим UIView, и просто перетащить в него UIButton и UILabel и расположите их так, как вы хотите, а затем в коде нагрузки перо, когда вам это нужно.

Во-вторых, чтобы создать этот UIView программно, и использовать метод addSubview и добавьте UILabel и UIButton таким образом. Убедитесь, что вы определили эти два подзаголовка с initWithFrame, если вы используете этот метод, чтобы они были правильно размещены в поле UIView. Я имею в виду, что происхождение этих представлений должно относиться к верхнему левому углу UIView.

Смежные вопросы