2013-10-11 3 views
2

Есть ли все-таки в управлении UIButton состояние (кнопка включения/выключения) в UITableViewCell. Моя проблема в том, что мой UIButton в ячейке сделан в storyboard с использованием viewWithTag. Я потратил довольно много времени, чтобы разобраться, но не повезло. Люди в основном разбираются в этой проблеме, программно назначая тег для кнопки с ячейкой indexPath.Как настроить UIButton в UITableViewCell?

Я знаю, что таблица будет повторно использовать ячейку, но я просто хочу спросить, есть ли другой хакерский способ разобраться в моей проблеме. Если это невозможно, мне может потребоваться создать кнопку программно.

+0

Что значит «состояние»? –

+0

Я хочу отключить кнопку, когда я нажимаю. Но проблема в том, что ячейка используется повторно, поэтому, когда я просматриваю представление таблицы, кнопка из другой ячейки также не сможет щелкнуть. – babygau

+0

у вас есть пользовательская ячейка? –

ответ

0

Вы можете пропустить все дочерние элементы ячейки и проверить, являются ли они UIButton, используя isMemberOfClass, чтобы получить вашу кнопку. Если у вас есть несколько кнопок, вы можете проверить текст кнопки или другое свойство, которое однозначно идентифицирует его. Это будет хакерский способ сделать это.

+0

Я также пробовал ваше решение раньше, но оно не работает. когда я нажимаю на кнопку, кнопка в этой строке отключена, но при прокрутке вниз ячейка повторно используется, некоторые кнопки в других строках также отключаются :(Это потому, что мой тег кнопки не установлен corressponding 'indexPath' ,Как я уже говорил, я просто создал кнопку, используя «раскадровку» и использую ее с помощью '-viewWithTag:' – babygau

0

Вы должны сделать заказ ячейки так:

CustomCell.h

@protocol CustomCellDelegate <NSObject> 

- (void)buttonPressed:(UIButton *)sender; 


@end 
#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell 

@property (weak, nonatomic) id<CustomCellDelegate> delegate; 
@property (weak, nonatomic) IBOutlet UIButton *button; 

- (IBAction)buttonPressed:(UIButton *)sender; 
@end 

CustomCell.m

#import "CustomCell.h" 

@implementation CustomCell 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

-(void)prepareForReuse{ 
    self.button.enable = YES; 
} 


- (IBAction)buttonPressed:(UIButton *)sender{ 
[self.delegate buttonPressed:sender]; 
} 
@end 

после IB в добавлении нового UITableViewCell в вашем UITableView и его классе с новой пользовательской ячейкой задайте идентификатор идентификатора, например «Cust omCell»добавить кнопку для пользовательской ячейке и подключить к розетке, то изменить вам Tableview: cellForRowAtIndexPath: как это:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
static NSString *[email protected]"CustomCell"; 
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

cell.delegate = self; 

return cell; 
} 

- (void)buttonPressed:(UIButton *)sender{ 
sender.enable = NO; 
} 

Также вы должны добавить CustomCellDelegate в подогревателя файле вашего контроллера

+0

Tks mate для вашего детального решения, я попробовал, но не работал. Всякий раз, когда ячейка повторно используется, состояние кнопки сбрасывается – babygau

+0

удаляет метод prepareFOrReuse, а код работает –

+0

, он все еще не работает. Проблема продолжает сохраняться – babygau

0

Один простой путь будет состоять в том, чтобы сохранить переменную NSMutableArray в вашем контроллере view и отслеживать, какая кнопка ячеек отключена/включена. И используйте метод UITableViewDataDelegate:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

, чтобы установить кнопки состояния каждый раз, когда он отображается. И метод UITableViewDelegate:

– tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)tableViewCell forRowAtIndexPath:(NSIndexPath *)indexPath 

написать в массив. Индексирование с помощью indexPath.

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