UIAlertController を表示した後、timerLabel を呼び出すタイマーを開始します。これにより、UIAlertControllers のみのアクション タイトルが更新されます。NSLog は、タイトルが実際には 25 から 1 に変化していることを示しています。ただし、UIAlertController の実際のタイトルは引き続き「25」と表示されます。
タイトルを表示できるように更新するには、何かを呼び出す必要がありますか? 8.3で正確なコードを実行すると動作しますが、これはベータ版であり、実際にリリースされたときに動作しない可能性があるため、ベータ版以外の8.2でも動作する必要があります. 提案をお待ちしております。
NSTimer *buttonTimer;
UIAlertController *touchAdverts;
int timeStart;
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
timeStart = 25;
//inform user they need to touch adverts
touchAdverts = [UIAlertController alertControllerWithTitle:@"IMPORTANT" message:@"text to show user" preferredStyle:UIAlertControllerStyleAlert];
[touchAdverts addAction:[UIAlertAction actionWithTitle:[NSString stringWithFormat:@"%i",timeStart] style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
//invalidate timer when button pressed
[buttonTimer invalidate];
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"hasHadTimedAlert"];
[[NSUserDefaults standardUserDefaults]synchronize];
}]];
//disables the action button from being interated with
[touchAdverts.actions[0]setEnabled:NO];
if ( ![[NSUserDefaults standardUserDefaults]boolForKey:@"hasHadTimedAlert"]) {
[self.view.window.rootViewController presentViewController:touchAdverts animated:YES completion:^{
//when alert is shown start timer to update the title of the alerts action
buttonTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerLabel) userInfo:nil repeats:YES];
}];
}
}
-(void)timerLabel{
if (timeStart >0) {
//countdown from timeStart
timeStart -= 1;
//update the action button title each second to new timeStart value
[touchAdverts.actions[0] setTitle:[NSString stringWithFormat:@"%i",timeStart]];
NSLog(@"%@",[touchAdverts.actions[0] title]);
}else{
//When value of timeStart reaches 0 enable the action button and change title
[touchAdverts.actions[0] setEnabled:YES];
[touchAdverts.actions[0] setTitle:@"I have read & understood the above"];
}
}