2013-12-16 6 views
0

Имеет ли UITableViewCell (или подкласс) способ распознать «на ходу», в котором сейчас находится строка? - не через метод didSelectRowAtIndexPath ...iOS >> UITableViewCell >> Пользовательская ячейка >> Номер строки

Если я подклассифицирую UITableViewCell и имею в нем некоторые объекты управления (кнопка, текстовое поле и т. д.), и я хочу ответить на это использование управления, я хочу ответить в связи с текущей строкой ячейки; делая это в файле MYTableViewCell.m.

Что я сделал до сих пор, присваивает тег Свойство с номером строки во время создания (cellForRowAtIndexPath); и затем я могу создать свой собственный протокол в файле MYTableViewCell, создать свойство «делегировать» и назначить каждую ячейку в VC в качестве ее делегата и отправить его сообщениям. Но это похоже на то, что нужно сделать для чего-то такого основного.

Есть ли способ «встроенного» для этого? Или более простой способ ...

+0

Если я правильно понял, вы хотите знать, есть ли строка на экране? –

ответ

3

Заканчивать метод

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell 

. Я склонен добавить свойство tableView в ячейку и установить его при создании ячейки в tableView, который будет владеть этой ячейкой. Затем позвоните:

[tableView indexPathForCell:cell] 

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

1

Ну, вы можете использовать метод cellatrowforindexpath для выполнения такого действия. , например, если вы хотите выполнить какое-либо действие при нажатии кнопки, вы можете сделать это.

cell.buttonName.tag=indexPath.row; 

и в действии, которое вы приложили к этой кнопке, делают это.

(ibaction)performsomeAction:(id)sender{ 
UIButton *btn=(UIButton*)sender; 
nslog(@"the row on which i have clicked is %d",btn.tag); 
} 

это скажет вам, какая строка вы сейчас.

0

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

Первое, что нужно сделать, это добавить целевого объекта действия по кнопке, как это:

[button addTarget:cell action:@selector(buttonTapped:withEvent:) forControlEvents:UIControlEventTouchUpInside]; 

Затем вы можете использовать событие параметр метода действия:

- (void)buttonTapped:(id)sender withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; 

    // .... 
} 

Или иерархия вида для извлечения ячейки:

- (void)buttonTapped:(id)sender withEvent:(UIEvent *)event 
{ 
    UITableViewCell *cell = (UITableViewCell *)[[sender superview] superview]; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

    // .... 
} 

Или положение отправителя (т. контроль):

- (void)buttonTapped:(id)sender withEvent:(UIEvent *)event 
{ 
    CGPoint position = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:position];   

    // .... 
} 
Смежные вопросы