iPhone Перехватывайте любое взаимодействие с приложением

Мне просто интересно, есть ли какой-либо способ отлова любого взаимодействия пользователя с приложением.

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

Есть ли у кого-нибудь идеи о том, как я могу поймать любое взаимодействие с пользователем, чтобы обновить это поле?

Спасибо

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


person Matt    schedule 19.08.2010    source источник


Ответы (2)


Вероятно, наиболее удобным способом было бы создание подкласса UIApplication и переопределение метода sendAction:to:from:forEvent:. Вам также потребуется добавить в файл Info.plist ключ с именем «NSPrincipalClass» со строковым значением, содержащим имя вашего подкласса, который сообщает UIKit вашему подклассу вместо UIApplication.

Мое приложение.m:

- (BOOL)sendAction:(SEL)action to:(id)target
        from:(id)sender forEvent:(UIEvent *)event
{
   ResetInterationTimeout();

   return [super sendAction:action to:target from:sender forEvent:event];
}

Info.plist:

<key>NSPrincipalClass</key>
<string>MyApplication</string>
person Todd Yandell    schedule 19.08.2010

Если под взаимодействием вы подразумеваете «касания», то вы можете легко сделать это, поместив UIView (если у вас нет глобального поверх других) на каждый UIViewController в вашем NavigationController, который обязан регистрировать касание, сохраняя текущий date контроллеру более высокого уровня (может работать даже AppDelegate). Затем этот контроллер может сравнить дату с предыдущей (вы должны ее сохранить), и если разница во времени превышает ваш порог, вы можете запустить свое действие, отправив сообщение соответствующему объекту. Вот руководство от Apple о том, как ловить касания (вам нужно будет переопределить метод touchesBegan:WithEvent:, чтобы получить первое касание)

person rano    schedule 19.08.2010