я работаю над студенческим проектом, где мне нужно знать, какая кнопка в какой строке нажата.
Каждая строка имеет разные метки, одну кнопку «нравится» и одну кнопку «не нравится».
Я знаю, как использовать NSIndexPath.row, чтобы определить, какая строка нажата, но в этом случае мне нужно знать, какая строка и какая кнопка в этой строке нажата.
Я искал по всему SO хорошее решение для определения того, в какой строке нажимается кнопка при наличии нескольких кнопок в строке.
Из того, что я понял, читая другие посты, использование button.tag может быть очень непредсказуемым, поэтому я предпочитаю использовать другой метод, если это возможно.
Я видел много приложений, в которых это реализовано, поэтому должен быть оптимальный способ сделать это.У кого-нибудь есть хорошие предложения?
Код:
SearchCell.h
@interface SearchCell : UITableViewCell {
IBOutlet UIButton *likebutton2;
IBOutlet UIButton *dislikebutton2;
}
@property (nonatomic,retain) IBOutlet UILabel *track_label;
@property (nonatomic,retain) IBOutlet UILabel *artist_label;
@property (nonatomic,retain) IBOutlet UILabel *album_label;
@property (nonatomic,retain) IBOutlet UIButton *likebutton2;
@property (nonatomic,retain) IBOutlet UIButton *dislikebutton2;
@property (nonatomic, copy) void (^onButton)(UIButton *button);
- (void)buttonAction:(UIButton *)sender;
@end
SearchCell.m
#import "SearchCell.h"
#import "RootViewController.h"
@implementation SearchCell
@synthesize likebutton2, dislikebutton2, track_label, artist_label, album_label;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code.
}
return self;
}
- (void)buttonAction:(UIButton *)sender
{
self.onButton(sender);
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state.
}
- (void)dealloc {
[super dealloc];
}
@end
cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *uniqueIdentifier = @"searchCell";
SearchCell *cell = nil;
Search *currentSearch = nil;
cell = (SearchCell *) [self.tableView dequeueReusableCellWithIdentifier:uniqueIdentifier];
if (tableView == [[self searchDisplayController] searchResultsTableView]) //Just from some previous debugging
{
currentSearch = [[searchxmlParser searchhits] objectAtIndex:indexPath.row];
}
if(!cell)
{
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SearchCell" owner:nil options:nil];
for (id currentObject in topLevelObjects) {
if ([currentObject isKindOfClass:[SearchCell class]]) {
cell = (SearchCell *)currentObject;
[cell.likebutton2 addTarget:cell action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[cell.dislikebutton2 addTarget:cell action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
cell.likebutton2.tag = 1;
cell.dislikebutton2.tag = 2;
break;
}
}
}
cell.onButton = ^(UIButton *theButton) {
[self handleButton:theButton indexPath:indexPath];
}
cell.track_label.text = [currentSearch track];
cell.artist_label.text = [currentSearch artist];
return cell;
}
Спасибо за помощь:)!