iOS. Добавить такое же второе действие для события UITableView didSelectRowAtIndexPath?

У меня есть несколько UITableView с готовыми методами делегата и источника данных. Как добавить то же второе действие / обработчик для этих таблиц с использованием подклассов, но без ручного редактирования их методов didSelectRowAtIndexPath?

Если я использую UIButtons вместо таблиц, решение будет следующим:

внутри дочернего класса UIButton:

- (void)defaultInit {

    [self addTarget:[PCFlurryManager manager] action:@selector(...) forControlEvents:UIControlEventTouchUpInside];
}

- (void)dealloc {

    [self removeTarget:[PCFlurryManager manager] action:@selector(...) forControlEvents:UIControlEventTouchUpInside];
    [super dealloc];
}

Поэтому я могу использовать addTarget для одного и того же события столько раз, сколько захочу. Но как реализовать подобное для стола?


person user2412679    schedule 23.05.2013    source источник


Ответы (2)


Вы можете назначить Tag своим UITableView (ам). И тогда вы можете получить доступ к таблице через ее тег.

Что-то типа..

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSLog(@"Tag: %d",tableView.tag);
    switch (tableView.tag) {
        case 1:
            //stuff for table 1
        break;

        case 2:
            //stuff for table 2
        break;

        default:
        break;
    }

}
person βhargavḯ    schedule 23.05.2013
comment
это лучше, чем предыдущий ответ, но, используя этот способ, вам все равно нужно отредактировать этот метод вручную - person user2412679; 23.05.2013
comment
@ user2412679, что вы имеете в виду под вам все еще нужно изменить этот метод вручную? - person βhargavḯ; 23.05.2013
comment
Как я уже писал, у меня есть несколько таблиц, и каждая из них имеет свой didSelectRowAtIndexPath. Поэтому мне нужно удалить их и скопировать эти экземпляры этого метода в другой класс. Например, когда я использую кнопку, мне не нужно изменять / копировать собственный метод для ретуши внутри события, потому что я могу изменить только его класс. Таким образом, я могу написать новый код отдельно, без дублирования и даже без переназначения делегата - person user2412679; 23.05.2013
comment
@ user2412679 Для этой цели вы можете создать категорию поверх UITableView. - person βhargavḯ; 24.05.2013
comment
спасибо проголосую за вас. Но я думаю, что нашел лучшее решение - person user2412679; 24.05.2013
comment
Пожалуйста, поделитесь своей ссылкой для решения, если у вас есть и если вы не против - person βhargavḯ; 24.05.2013
comment
Думаю, я мог бы создать категорию с помощью этого метода и вызвать из него исходный метод: stackoverflow.com/questions/1085479/ - person user2412679; 24.05.2013

didSelectRowAtIndexPath предоставляет вам объект (UITableView *) tableView, который указывает, что этот метод является вызовом для какого tableview.

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    {
         if(tableView==YourFirstTableviewObject) {
                   //write your code for first
         } 
         else if(tableView==YourSecondTableviewObject) {
                   //write your code for second
         }   
         else if(tableView==YourThirdTableviewObject) {
                   //write your code for Third
         }
         ..........
    }
person SAMIR RATHOD    schedule 23.05.2013
comment
1) в этом ответе вы редактируете этот метод; 2) это вызывает много кода, если объекты этих таблиц находятся в разных классах - person user2412679; 23.05.2013