Аппселератор. Кнопки в строках не нажимаются

Версия Titanium SDK: 1.6.2 (пробовали и с 1.7) Версия SDK для iPhone: 4.2

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

Это мой код: http://pastie.org/1932098

Что не так?


person Jonathan Clark    schedule 20.05.2011    source источник


Ответы (1)


Вы добавляете button.addEventListener вне оператора for, и, поскольку вы перезаписываете переменную кнопки с каждой итерацией, eventListener прикрепляется только к последней созданной кнопке.

Это, вероятно, не лучший способ сделать это, но чтобы решить вашу проблему, переместите button.addEventListener внутрь оператора for, а затем проверьте уникальный идентификатор в объекте, который отправляется в событие. Пример:

for (x=0;x<5;x++) {

var button = Titanium.UI.createButton({
    height:40,
    width:100,
    top:50*x,
    id:x
});

var label = Titanium.UI.createLabel({
    text:'LABEL '+x
});
button.add(label);
win1.add(button);

button.addEventListener('click', function(e){
    Ti.API.info('Button clicked '+e.source.id);
});

}

Свойство button.id только что создано, но теперь вы можете видеть, какая кнопка отправляет событие. Вы также можете использовать заголовок или что-то еще уникальное.

Другие варианты, на которые стоит обратить внимание, — это создание уникальных имен переменных для каждой кнопки, но это, вероятно, больше работы. Кроме того, вместо того, чтобы помещать кнопку в строку таблицы, используйте метку или изображение, а затем прослушивайте событие, сгенерированное таблицей или строкой.

person Adam Paxton    schedule 23.05.2011
comment
Хорошо выглядит! Я это попробую. Другое дело, как я могу заставить строку, содержащую нажатую кнопку, исчезнуть после щелчка (только нажатая строка)? - person Jonathan Clark; 24.05.2011