2011-01-21 4 views
0

У меня есть многопользовательское приложение для iPhone, которое я разрабатываю, у которого будет много входов на разных экранах, и вместо того, чтобы повторять себя повсюду с помощью некоторого метода, который просто отправляет сообщение resignFirstResponder, я думал, что сделаю статический метод в моем классе контроллера root и решить все мои требования resignFirstReponder с помощью одной функции. Это возможно? Я не могу перетащить файл корневого контроллера .h в конструктор интерфейса, и если я попытаюсь сбросить класс там, я не могу подключить к нему какие-либо события. Есть ли способ перехватывать события до метода IBAction, который является статическим?Могу ли я использовать статический метод IBAction для подключения событий?

Edit:

Я должен был быть более ясно, что я пытаюсь сделать. В принципе, я вызываю resignFirstResponder в событии «Did End On Exit» текстовых полей, чтобы избавиться от клавиатуры. (Является ли это даже правильным способом? Я новичок в iPhone). Поскольку я буду использовать это во всем месте на разных представлениях, я не хотел бы писать одну и ту же функцию для каждого представления. Я хочу иметь функцию +(void) resignSomeKeyboardsOrSomething в моем корневом контроллере, чтобы я мог подключить мои события «Делать конец на выходе» до каждого вида. Есть ли способ сделать это? Извините за неопределенность в первый раз.

ответ

1

Позвольте мне понять, если я это понимаю, у вас есть приложение с несколькими экранами, которые делают всевозможные вещи, и вы хотите, чтобы эти вещи вызывали функцию, правильно?

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

Итак, предположим, что у вас есть функция resignMyResponder, определенная в контроллере корневого представления. Просто добавьте следующую строку в ваш корневой файл контроллера представления, в функции инициализации:

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(resignMyResponder:) 
name:@"resignThis" 
object:nil]; 

Затем, в других ваших экранах/файлов, каждый раз, когда вы хотите resignMyResponder называется, просто сделать:

[[NSNotificationCenter defaultCenter] 
postNotificationName:@"resignThis" object:nil]; 

resignMyResponder, вероятно, должен быть довольно сложным для обработки всех различных ситуаций, в которых он может быть вызван, но это зависит от реализации вашего приложения.

+0

Хотя это абсолютно потрясающе, и я определенно буду использовать его для других вещей, я думаю, что это делает то, что я пытаюсь сделать более сложным в этом случае. Я не думаю, что я был ясен в своем вопросе и добавил дополнительную информацию. Спасибо за эту информацию, но это будет чрезвычайно полезно! – Justin

0

UIResponder К сожалению, это не так ясно, как NSResponder об этом.

resignFirstResponder

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

- (BOOL)resignFirstResponder

Обсуждение

Реализация по умолчанию возвращает YES, в отставку первый ответчик статус. Подклассы могут переопределить этот метод для обновления состояния или выполнить какое-то действие , например, не высвечивая выбор , или возвращать НЕТ, отказываясь , чтобы отказаться от статуса первого ответчика.

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

1) Методы, которые предназначены для вызова непосредственно из какого-то другого объекта для извлечения некоторых данных или для выполнения действия. [view setNeedsDisplay:YES];

2) Методы, которые должны быть переопределены (конкретными) подклассами. Вы вообще никогда не называете эти методы самим кодом; скорее, они называются от вашего имени Cocoa с намерением, чтобы вы переопределили их для выполнения вашей пользовательской реализации. Какао звонит - (void)drawRect:(NSRect)frame; для вас. Это особенно характерно для абстрактных классов, таких как UIResponder и NSResponder.

- (BOOL)resignFirstResponder относится к последним: этот метод по существу является какао, спрашивающим вас: «Вы хотели бы уйти с первого ответчика?». Вы отвечаете ДА или НЕТ. Он вызывается автоматически по мере необходимости. Вам не нужно называть это напрямую.

документация NSResponder еще более ясно:

resignFirstResponder

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

- (BOOL)resignFirstResponder

Обсуждение

Реализация по умолчанию возвращает YES, в отставку первый ответчик статус. Подклассы могут переопределить этот метод для обновления состояния или выполнить какое-то действие , например, не высвечивая выбор , или возвращать НЕТ, отказываясь , чтобы отказаться от статуса первого ответчика.

Используйте метод NSWindow makeFirstResponder: , этот метод не, чтобы сделать объект первым ответчиком. Никогда не используйте этот метод напрямую .

Не уверен, что, если есть iPhone эквивалент makeFirstResponder:, но это то, что вы должны стремиться к (вы активно делают новый вид, чтобы быть первым ответчиком).