Помогите по простому определить какой именно объект вызывает событие в UITableView
Только разбираюсь в obj-c и соответственно вопрос будет тупой.
Образно говоря хочу сделать редактор таблички чтобы было 5 колонок и много строк. Делаю через tableview. Добавляю в cell текстовые поля.
Вот как бы мне передать в editFinished значение переменной i и indexPath. row чтобы я мог сохранить полученное значение в массив. В editFinished передается (id) сам объект uitextfield. Может как-то в нем сохранить его координаты.
Образно говоря хочу сделать редактор таблички чтобы было 5 колонок и много строк. Делаю через tableview. Добавляю в cell текстовые поля.
- (UITableViewCell *)tableView:( UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %d", indexPath. row ];
MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
.....
for (int i=0; i < 5;i++) {
UITextField *lbl = [[[UITextField alloc] initWithFrame:CGRectMake(50+i*colWidth+1, 3, colWidth-1, 20)] autorelease];
.....
[lbl addTarget:self action:@selector(editStarted:) forControlEvents:UIControlEventEditingDidBegin];
[lbl addTarget:self action:@selector(editFinished:) forControlEvents:UIControlEventEditingDidEnd];
[cell.contentView addSubview:lbl];
[lbl release];
}
}
return cell;
}
- (IBAction)editFinished:(id)sender {
}
Вот как бы мне передать в editFinished значение переменной i и indexPath. row чтобы я мог сохранить полученное значение в массив. В editFinished передается (id) сам объект uitextfield. Может как-то в нем сохранить его координаты.
#2
Отправлено 16 июля 2009 - 21:30
Ну, можно использовать свойство tag uitextfield'a(вообще uiview) в котором и хранить подобную информацию.
Tag Property
Tag Property
#3
Отправлено 16 июля 2009 - 21:32
Чтобы сохранить координаты в UITextView, можно использовать его свойство NSInteger tag:
Теперь, получив id textField по окончании редактирования, можем запросить свойство tag, доступное для математического разбора на координаты.
Формат такой: CCCBBBBA99, где A-номер столбца, B-номер строки, C-номер секции. Соотвественно, появляются ограничения по количеству строк (не более 10000) и секций (не более 213).
- (UITableViewCell *)tableView:( UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %d", indexPath. row ];
MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
.....
for (int i=0; i < 5;i++) {
UITextField *lbl = [[[UITextField alloc] initWithFrame:CGRectMake(50+i*colWidth+1, 3, colWidth-1, 20)] autorelease];
.....
[lbl addTarget:self action:@selector(editStarted:) forControlEvents:UIControlEventEditingDidBegin];
[lbl addTarget:self action:@selector(editFinished:) forControlEvents:UIControlEventEditingDidEnd];
[cell.contentView addSubview:lbl];
lbl.tag=99+i*100; //Добавляем маркер 99, чтобы опознать в массиве подвидов. Запоминаем номер столбца в регистре сотен.
[lbl release]; //!!! так делать нельзя, поскольку lbl уже авторелизится при инициализации. Нужно выбрать что-нибудь одно. Лучше убрать авторелиз.
}
}
for (UIView *aView in cell.contentView.subviews){
if (aView.tag%100==99) aView.tag=aView.tag%1000+indexPath. row *1000+indexPath. section *10000000; //Обрезаем существующий маркер до значения столбца и формируем новый
}
return cell;
}
Теперь, получив id textField по окончании редактирования, можем запросить свойство tag, доступное для математического разбора на координаты.
Формат такой: CCCBBBBA99, где A-номер столбца, B-номер строки, C-номер секции. Соотвественно, появляются ограничения по количеству строк (не более 10000) и секций (не более 213).
#4
Отправлено 16 июля 2009 - 21:46
Ну да. А можно наверное так:
- (UITableViewCell *)tableView:( UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %d", indexPath. row ];
MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
.....
for (int i=0; i < 5;i++) {
UITextField *lbl = [[[UITextField alloc] initWithFrame:CGRectMake(50+i*colWidth+1, 3, colWidth-1, 20)] autorelease];
.....
[lbl addTarget:self action:@selector(editStarted:) forControlEvents:UIControlEventEditingDidBegin];
[lbl addTarget:self action:@selector(editFinished:) forControlEvents:UIControlEventEditingDidEnd];
[cell.contentView addSubview:lbl];
lbl.tag=i;
}
}
cell.contentView.tag=indexPath.row+indexPath. section *10000;
return cell;
}
No comments:
Post a Comment