Попробуйте установить свойство NSTimer
в вашем контроллере представления. Когда кнопка нажата, создайте таймер и назначьте его на свое имущество. Вы можете обнаружить этот момент с помощью этого:
[button addTarget:self action:@selector(startHoldTimer) forControlEvents:UIControlEventTouchDown];
и назначьте с этим:
-(void) startHoldTimer {
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(goToNewView:) userInfo:nil repeats:NO];
}
Затем задайте действие для запуска при отмененном касании или касании внутри:
[button addTarget:self action:@selector(touchUp) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:self action:@selector(cancelTimer) forControlEvents:UIControlEventTouchCancel];
и
//if timer fires, this method gets called
-(void) goToNewView {
[self cancelTimer];
[self loadSecondView];
}
// normal button press invalidates the timer, and loads the first view
-(void) touchUp {
[self cancelTimer];
[self loadFirstView];
}
//protected, just in case self.myTimer wasn't assigned
-(void) cancelTimer {
if (self.myTimer != nil)
if ([self.myTimer isValid]) {
[self.myTimer invalidate];
}
}
Это должно позаботиться об этом!