2015-08-12 2 views
0

У меня есть кнопка на моей ячейке просмотра таблицы. Я возвращаю numberOfRowsInSection как return arrayname.count. поэтому я получаю такое же количество кнопок, сколько и количество массивов.Повторное использование ячейки в виде таблицы вызывает проблемы с кнопками

Я вызываю уведомление с помощью этой кнопки, когда пользователь снова нажимает эту кнопку, уведомление отменяется. Это уведомление о местоположении.

Он отлично работает, если в виде таблицы есть только одна кнопка. Но когда я возвращаю 2 или более ячеек, я не могу понять, как различать события кнопок без влияния на другое. Пример: в таблице две ячейки и две кнопки. Один для местоположения «a» и один для местоположения «b». Я хочу получить уведомление, когда я вхожу в область «a», поэтому я нажимаю кнопку, соответствующую местоположению «a». но поскольку кнопка «b» не нажата, уведомление не получает запланированного. он отлично работает, только если все кнопки находятся в одном состоянии. но, как я могу решить эту проблему?

`button.addTarget(self, action: "pressed:", forControlEvents: .TouchUpInside) 
button.setImage(UIImage(named: "a.png")!, forState: .Normal) 
button.tag = 999 
func pressed(sender: UIButton!) { 
if sender.tag == 999 
{ sender.setImage(UIImage(named: "b.png")!, forState: .Normal) 
sender.tag = 0 } else 
{ sender.setImage(UIImage(named: "a.png")!, forState: .Normal) sender.tag = 999 } 
}` 

Я уже этот код использую для переключения изображений на нажатие кнопки.

+1

вы можете предоставить тег со значением indexpath.row и ButtonClick получить тег и работать в соответствии с этим. –

ответ

0
/*Buy settings the tag to your button you can identify which button is selected */ 
    //create a button globally in your view controller 
    uibutton*menu 
    // add the below code in your cellForRowAtIndexPath method 
    [menus addTarget:self action:@selector(menuclick:) forControlEvents:UIControlEventTouchUpInside]; 
    menus.tag=indexPath.row+1; 
    //identify button using button sender 
    (void)menuclick:(id)sender 
    { 
    NSInteger tagid=[sender tag]; 
     if(checkbutton.isSelected) 
    { 
    //you can identify which button get selected 
    switch (tagid) 
    { 
     case 1: 
      //button 1 is selected 
      break; 
     case2: 
      //button 2 is selected 
      break; 
     default: 
      break; 
    } 
    [menu setSelected:NO]; 
    } 
    else 
    { 
    //you can identify which button get unselected 
    switch (tagid) 
    { 
     case 1: 
      //button 1 is selected 
      break; 
     case2: 
      //button 2 is selected 
      break; 
     default: 
      break; 
    } 
    [menu setSelected:YES]; 

    } 


    } 
+0

Установив тег на свою кнопку, вы можете определить, какая кнопка была нажата в событии нажатия кнопки. –

+0

'button.addTarget (self, action:" нажато ", forControlEvents: .TouchUpInside) button.setImage (UIImage (named:" a.png ") !, forState: .Normal) button.tag = 999 нажата функция (отправитель : UIButton!) {If sender.tag == 999 {sender.setImage (UIImage (named: "b.png") !, forState: .Normal) sender.tag = 0} else {sender.setImage (UIImage (named: «a.png») !, forState: .Normal) sender.tag = 999}} 'Я уже использую этот код для переключения изображений при нажатии кнопки. Я запутался, как мне реализовать ваше решение? – sumesh

+0

Тег должен начинаться с 1, а не из 0.if использовать нуль, он получит сбой и задает другое значение тега для каждой кнопки. –

1

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

Самый простой способ обнаружить, какая кнопка нажата, чтобы добавить строку:

button.tag = indexPath.row 

к вашей cellForRowAtIndexPath функции. Тогда в функции, которая запускается на кнопках добавить:

func buttonPressed(sender:UIButton) { 
    let selectedItem = arrayname[sender.tag] // this gives you selected item from array 
    // or you can do 
    if sender.tag == 0 { 
     // button in first cell pressed 
    } 
} 
+0

'button.addTarget (само, действие: "нажата:", forControlEvents: .TouchUpInside) button.setImage (UIImage (названный: "a.png") !, Форстате: .Normal) button.tag = 999 func нажата (отправитель: UIButton!) { если sender.tag == 999 { sender.setImage (UIImage (имя: "b.png") !, forState: .Normal) sender.tag = 0 } else { sender.setImage (UIImage (имя: «a.png») !, forState: .Normal) sender.tag = 999 } } 'Я уже использую этот код для переключения изображений на нажатие кнопки. Я запутался, как мне реализовать ваше решение? – sumesh

+0

@sumesh подкласс вашего UIButton и добавить Boolean свойство, которое будет хранить информацию о том, выбрана ли эта кнопка или нет. Кроме того, вы можете использовать нечетные теги для кнопок, которые не выбраны, и даже теги для выбранных. При таком подходе вы все равно можете легко получить индекс нажатой кнопки;) –

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