2013-06-12 3 views
0

В моем представлении таблицы у меня есть несколько различных пользовательских ячеек. В одном из них есть кнопка. Эта кнопка вызывает другой контроллер вида. Тем не менее, он не нужен, пока таблица полностью не загрузится. В cellForRowAtIndexPath я настраивал все свои собственные пользовательские ячейки. Я могу раскомментировать [buttonCell.myButton setHidden: YES]; и он скроет мою кнопку. Смотри ниже.Скрыть UIButton в пользовательском UITableViewCell

else if (indexPath.section == 3) 
{ 
    ButtonCell *buttonCell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"]; 

    //[buttonCell.myButton setHidden:YES]; 
    cell = buttonCell; 
} 
    return cell; 

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

[ButtonCell.myButton setHidden:NO]; 

Но компилятор дает мне предупреждение, что свойство MyButton не найден в миниатюрный элемент питания. Есть ли у кого-нибудь идеи, как двигаться по кнопке. Что я делаю неправильно, а чего я не получу! Спасибо за вашу помощь.

EDIT 1

Мой класс кнопка клетка ... .h #import

@interface ButtonCell : UITableViewCell 

@property (strong, nonatomic) IBOutlet UIButton *myButton; 
- (IBAction)YDI:(id)sender; 


@end 

.m

#import "ButtonCell.h" 
#import "AnotherWebViewController.h" 

@implementation ButtonCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
    // Initialization code 
} 
return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
[super setSelected:selected animated:animated]; 

// Configure the view for the selected state 
} 

- (IBAction)YDI:(id)sender 
{ 

} 

@end 

EDIT 2

С помощью каждого, что ответил (спасибо), я получил немного дальше, но кнопка не отображается сама. Поэтому я все еще скрываю кнопку в cellForRowAtIndexPath, которая работает так, как должна. Затем в моем методе, что я перезагружаю данные, я добавляю следующий код.

NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:3]; 
ButtonCell *buttonCell = (ButtonCell *) [self.tableView cellForRowAtIndexPath:index]; 
[buttonCell.myButton setHidden:NO]; 

с миниатюрный элемент питания кнопки всегда четвертая секция (считая первым как 0), и она имеет только одну строку. Любая другая помощь будет оценена по достоинству. Почти готово!

EDIT 3 Получил это! Однако это было связано с комментарием, что я смог понять это. Благодаря @ A-Live. Хотя я знаю, как получить ячейку в методе вне cellForRowAtIndexPath благодаря ElJay. Поэтому я даю ему чек, так как я узнал что-то новое, поэтому мы все равно отправляем вопросы. Поэтому внутри моего метода cellForRowAtIndexPath - это место, где я скрываю/показываю кнопку. У меня есть BOOL в моем приложении, которое называется final, изначально оно установлено в true. Когда представление таблицы заканчивается, оно установлено в значение false. Поэтому я просто использовал этот bool, чтобы показать/скрыть кнопку.

else if (indexPath.section == 3) 
{ 
    ButtonCell *buttonCell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"]; 

    if (!_finished) 
    { 
     [buttonCell.myButton setHidden:YES]; 
    }else{ 
     [buttonCell.myButton setHidden:NO]; 
    } 

    cell = buttonCell; 
} 
    return cell; 

Еще раз это только часть метода cellForRowAtIndexPath. Еще раз спасибо за помощь. Я был удивлен, увидев так много ответов! Благодарю.

+0

Есть ли тип? Я не считаю, что код должен компилироваться. –

+0

показать нам класс ButtonCell .h –

+0

@ LithuT.V, я включил класс ButtonCell. – Douglas

ответ

1

myButton принадлежит к клетке. Вам нужно будет получить экземпляр этого UITableViewCell, а затем вы можете его отобразить, это предполагает, что вы хотите изменить объекты ячейки за пределами cellForRowAtIndexPsth или willDisplayCell.

+0

Как бы я это сделал. Я попытался получить экземпляр ButtonCell, но он не работал в методе, который я вызываю reloadData. – Douglas

+0

Вы должны знать indexPath строки, которую вы хотите обновить, тогда это всего лишь вопрос чего-то подобного: ButtonCell * buttonCell = [self.myTableView cellForRowAtIndexPath: nowIndex]; –

+0

спасибо. Я попробую сегодня вечером и дам вам знать, как это происходит. – Douglas

1

Ошибка в верхнем регистре, может быть?

[buttonCell.myButton setHidden:NO]; // Trying to access instance variable 

Вместо:

[ButtonCell.myButton setHidden:NO]; // Trying to access class variable 
+0

Я не могу использовать строчные кнопкиCell. Это было создано в cellForRowAtIndexPath, и я хочу скрыть кнопку в другом методе. – Douglas

1

В коде

[ButtonCell.myButton setHidden:NO]; 

Вы пытаетесь использовать имя класса объекта вместо имени объекта. Вы должны получить ячейку, которая содержит вашей кнопку

buttonCell = [tableView cellForRowAtIndexPath:indexPath]; 
buttonCell.myButton.hidden = NO; 
+0

спасибо за ваше время. Ячейка, у которой есть моя кнопка, всегда является последней ячейкой. Я понял, как получить эту последнюю ячейку, но я не уверен, как использовать cellForRowAtIndexPath. Я следовал за предложением Элджи, но это не сработало, пожалуйста, взгляните. Любые идеи были бы хорошы. – Douglas

+0

Фактически ячейка является последней ячейкой в ​​разделе 3. – Douglas

+0

Добавлено больше кода! Спасибо, что посмотрели. – Douglas

1

У вас есть общественное аксессор для этого свойства в файле заголовок миниатюрного элемента питания? Что-то вроде @property (nonatomic, retain) UIButton *myButton;
Так я обычно вижу такое предупреждение компилятора.

+0

Проверьте ответ Lithu T.V. То, что вы пропустили, - это бросок к ButtonCell. Ваш экземпляр myButton будет просто рассматриваться как обычный UITableViewCell без этого перевода. Должен прокомментировать мой собственный ответ, потому что пока у меня не хватает репутации. – Lenrocexe

+0

проверить мой отредактированный вопрос. – Douglas

2

Сделать общедоступным объявление общедоступным.

@property (nonatomic, retain) UIButton *myButton; 

Тогда в cellForRowAtIndexpath

ButtonCell *buttonCell =(ButtonCell *) [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"]; 
+0

Думаю, я уже сделал это. Проверьте мой файл .h для класса ButtonCell. И я поместил вашу вторую строку в мой метод cellForRowAtIndexPath. – Douglas

+0

@Douglas вы включили '(ButtonCell *)' в тип –

+0

., Да, я сделал, хотя я не уверен на 100%, зачем это делать! Позже выведет еще какой-нибудь код. Еще раз спасибо за все ваше время. – Douglas

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