2016-11-17 10 views
1

Возможно ли создать функцию, которая может сгенерировать UIAlertAction и вернуть ее с помощью обработчика.Как написать общую функцию для создания UIAlertAction для UIAlertViewController, которая будет использоваться в целом приложении?

Я просто не хочу писать код для UIAlertAction несколько раз, только пытаясь создать единую функцию, которая может создать UIAlertAction для каждого требуемого сценария. Вот мой код.

UIAlertAction *actionPast = [self createActionButton:@"Past"]; 
    UIAlertAction *actionFuture = [self createActionButton:@"Future"]; 

    -(UIAlertAction *)createActionButton : (NSString *)title{ 
     UIAlertAction *action = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {}]; 
     return action; 
    } 

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

+0

Вопрос не совсем ясен. Почему вы пытаетесь это сделать? –

+0

Я просто не хочу писать код UIAlertAction снова и снова во всех контроллерах. –

+0

просто я хочу, чтобы одноэлементная функция создала приложение UIAlertAction для всего приложения –

ответ

1

Да, вы можете это сделать. Создайте следующий метод в полезности класса/общего класса (Если вы хотите, чтобы быть метод класса или метод экземпляра будет зависеть от вас):

+(UIAlertAction *) createAlertActionWithSelector:(SEL) selector andTitle:(NSString *) title andAlertActionStyle:(UIAlertActionStyle) style andCallBackTarget:(id) target{ 
    UIAlertAction *action; 

    action = [UIAlertAction actionWithTitle:title style:style handler:^(UIAlertAction * action) { 
     [target performSelector:selector]; 

    }]; 
    return action; 
} 

Например, если вы хотите создать AlertAction с названием «OK», код, внедренный в методе «okButtonTapped» и UIAlertActionStyleDefault, вы назвали бы это так:

UIAlertAction * okAction = [UtilityClass createAlertActionWithSelector:@selector(okButtonTapped) 
                    andTitle:@"OK" 
                  andAlertActionStyle:UIAlertActionStyleDefault 
                 andCallBackTarget:self]; 

здесь CallbackTarget является то, что класс, который вы вызываете ваш общий метод из так мы проходим self здесь. Метод, который должен выполняться в обработчике, должен существовать в callBackTargetClass.

Теперь добавьте его в UIAlertController как:

[alertController addAction:okAction]; 

Просто убедитесь, что для создания методов для кода, который вы хотите запустить в блоке обработчика и передать этот метод в качестве селектора в ваш метод alertAction создателя. Вот и все.

Отказ от ответственности: Это работает, но в настоящее время она показывает предупреждение, что селектор может вызвать утечку, как селектор неизвестно о выполнении выбора. См. Это answer за это предупреждение

+0

спасибо за ответ, он работает, но проблема в том, что я хочу уменьшить код, но при таком подходе количество операторов одинаково. –

+0

Так вы могли бы предложить мне следовать этому методу singleton, потому что мой код в Number of lines для создания UIAlertAction не уменьшается. –

+0

@SumitDhariwal Подождите, что? Вы должны поместить это в класс утилиты/singleton и вызвать этот метод оттуда в соответствии с вашими сценариями. – NSNoob

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

  • Нет связанных вопросов^_^