2014-11-07 3 views
0

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

ButtonImage = [UIImage imageNamed:@"work_exe_old.png"];  
myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
myButton.frame = CGRectMake(250,10,34,34); 
myButton.tag=22; 
[myButton setBackgroundImage:ButtonImage forState:UIControlStateNormal]; 
[myButton addTarget:self action:@selector(select_id:)forControlEvents:UIControlEventTouchDown]; 

- (IBAction)select_id:(id)search 
{ 
    UIButton *tempBtn =(UIButton *) search; 
    [tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal]; 
} 

нажал кнопку изображения изменяется (work_exe.png). Вэнь кликнуть на ту же кнопку снова означает, что изображение нужно изменить (work_exe_old.png) его как флажок в таблице. Как я могу достичь Tis

ответ

1

Вместо этого таким образом вы можете настроить свой код намного лучше. Проверьте код ниже:

ButtonImage = [UIImage imageNamed:@"work_exe.png"]; 
ButtonImageSelected = [UIImage imageNamed:@"work_exe_old.png"]; 

myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

myButton.frame = CGRectMake(250,10,34,34); 

myButton.tag=22; 

[myButton setBackgroundImage:ButtonImage forState:UIControlStateNormal]; 

[myButton setBackgroundImage:ButtonImageSelected forState:UIControlStateSelected]; 

[myButton addTarget:self action:@selector(select_id:)forControlEvents:UIControlEventTouchDown]; 

И вы можете реализовать этот метод выбора, как это:

-(IBAction)select_id:(UIButton *) tempBtn { 

    [tempBtn setSelected:! tempBtn.selected]; 
} 
+0

как можно реализовать tis-код в изображении ячейки tableview, не отображающем ячейку ... помогите мне !!! –

+0

Я не понял вас, что вы сказали сейчас. В приведенном выше коде вы должны помещать внутри делегата 'cellForRowAtIndexPath' метод' UITableView', если вы добавляете UIButton динамически. Будьте осторожны, потому что ячейки повторно используются в 'UITableView'. –

+0

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

0

Если вы хотите сделать действие, нажав на UITableViewCell вы должны реализовать didSelectRowAtIndexPath и перед тем decalre int i; gobally затем следуют ниже код, чтобы сделать изменения для изображения кнопки

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

     switch (i) { 
       case 0: 
        if(indexPath.row==0) 
        [tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal]; 
} 
       else if (indexPath.row==1) 
{ 
    [tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal]; 
} 
    else if (indexPath.row==2) 
{ 
[tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal]; 
} 
. 
. 
. 
else if (indexPath.row==n) 
{ 
[tempBtn setImage:[UIImage imageNamed:@"work_exeN.png"] forState:UIControlStateNormal]; 
} 
        i=1; 
        break; 
       case 1: 
        if(indexPath.row==0) 
        [tempBtn setImage:[UIImage imageNamed:@"work_exe0.png"] forState:UIControlStateNormal]; 
} 
       else if (indexPath.row==1) 
{ 
    [tempBtn setImage:[UIImage imageNamed:@"work_exe1.png"] forState:UIControlStateNormal]; 
} 
    else if (indexPath.row==2) 
{ 
[tempBtn setImage:[UIImage imageNamed:@"work_exe2.png"] forState:UIControlStateNormal]; 
} 
. 
. 
. 
else if (indexPath.row==n) 
{ 
[tempBtn setImage:[UIImage imageNamed:@"work_exeN.png"] forState:UIControlStateNormal]; 
} 
        i=0; 
        break; 

       default: 
        break; 
      } 

    [yourtablename reloadData]; 

Примечание: напишите этот код после метода cellForRowAtIndexPath

+0

щелкнув по первой ячейке, изменилось изображение последней ячейки. Вэнь клик по каждой ячейке, которую конкретная кнопка хочет изменить. во второй раз щелкните только изображение с высоким освещением. (не показано изображение work_exe.png) –

+0

Могу ли я полностью узнать, сколько ячеек в таблице.? @saravanaa. переигрывать быстро, чтобы сделать редактирование –

+0

Всего ячеек получают от webservies. –

0

набор фоновых изображений в UIButton по каждой из его состояний управления,

например

UIImage *normal = [UIImage imageNamed:@"work_exe.png"]; 
UIImage *highlighted = [UIImage imageNamed:@"work_exe_old.png"]; 
UIImage *selected = [UIImage imageNamed:@"work_exe_old.png"]; 

[myButton setBackgroundImage:normal forState:UIControlStateNormal]; 
[myButton setBackgroundImage:highlighted forState:UIControlStateHighlighted]; 
[myButton setBackgroundImage:selected forState:UIControlStateSelected]; 
0

Я не уверен, что погода я вас правильно понимаю. Если вы хотите, чтобы изображение изменилось после щелчка, вы должны где-то сохранить текущее состояние своего изображения, например. в NSInteger, который содержит состояние для вашей ячейки как число, которое представляет, какое изображение должно отображаться. В методе tableView: cellForRowAtIndexPath: поместите правильное изображение (в соответствии с вашим NSInteger) в ячейку.

@interface MyTabelViewClass() 
@property (assign) NSInteger currentImageState; 
... 
@end 

В Tableview: cellForRowAtIndexPath: метод, вы где-то должны решить, какой образ выбрать, в соответствии с этим свойством:

switch (self.currentImageState) { 
    case 0:myCell.imageView = [[UIImageView imageViewWithImage:[UIImage imageNamed:@"..."]]; break; 
    case 1:myCell.imageView = [[UIImageView imageViewWithImage:[UIImage imageNamed:@"..."]]; break; 
... 
} 

В Tableview: didSelectRowAtIndexPath вы должны изменить состояние где-то, как

self.currentImageState = (self.currentImageState + 1) % maximumNumberOfStates; 
... 
[self.myTableView reloadData] 
... 

Может быть, это хорошая идея назвать reloadData с некоторой задержкой, потому что вы хотите ждать анимации Отмена выбора, чтобы закончить первый. Вы можете сделать это, позвонив по телефону

[self.myTableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.35] 
+0

как сохранить состояние кнопки в массиве, как я реализую метод ур помочь мне.например код кода –

+0

см. Отредактированный ответ выше –

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