Я пытаюсь настроить очень простой UIAlertView
с текстовым редактированием, кнопкой «ОК» и «Отмена», и я хочу отключить кнопку «ОК» на основе содержимого редактирования текста.Переменные переменные аргументы для UIAlertView
Чтобы удержать делегата, чтобы он не ушел перед представлением оповещения (и, таким образом, вызвал сбой, как только пользователь что-то сделал с видом предупреждения), я подклассифицировал его. Теперь я хочу, чтобы иметь возможность направить otherButtonTitles
аргумент из моего метода инициализации методы UIAlertView
инициализации, но по некоторым причинам, просто делать это:
- (id)initWithTitle:(NSString *)title
message:(NSString*)message
delegate:(id /*<UIAlertViewDelegate>*/)delegate
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString *)otherButtonTitles, ... {
if (self = [super initWithTitle:title
message:message
delegate:delegate
cancelButtonTitle:cancelButtonTitle
otherButtonTitles:otherButtonTitles, nil]) {
//stuff
}
только добавляет первый элемент из аргументов в боевую готовность вид. Я обнаружил, что я могу на самом деле вручную добавить кнопки для предупреждения зрения с помощью этого:
va_list args;
va_start(args, otherButtonTitles);
for (NSString *buttonTitle = otherButtonTitles; buttonTitle != nil; buttonTitle = va_arg(args, NSString*)) {
[self addButtonWithTitle:buttonTitle];
}
va_end(args);
, но затем, мой alertViewShouldEnableFirstOtherButton
метод делегата не вызывается больше, with the probable explanation in this post.
Таким образом, как правильно перевести мой otherButtonTitles
в метод инициализации UIAlertView
?
Я всегда был обеспокоен тем фактом, что в C вы можете собирать с переменным числом аргументов va_list, но не имеет возможностей передавать их дальше к другому VARIADIC функции. Мы знаем как аби, так и границы, но не сэр. – user3125367
Btw, если вы знакомы с objc runtime (objc_msgSend) и уверены, что количество других кнопок никогда не превышает фиксированного предела, вы можете использовать хак, описанный здесь: http://c-faq.com/varargs/handoff.html – user3125367
@ user3125367 Спасибо за ссылку, но здесь это совершенно невозможно, так как я связан сигнатурой метода инициализации 'UIAlertView', которая не принимает переменные va_list, но вариативные аргументы ... – JBL