gpt4 book ai didi

ios - 弹出到 Root View 时恢复倒计时

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:06 24 4
gpt4 key购买 nike

我是 iPhone 开发的新手,正在使用导航 Controller 和 Storyboard制作一个倒计时项目。我的应用程序有两个 View 。第一个 View 只有一个按钮。单击此按钮时,它将转到第二个 View 。第二个 View 有倒计时对象。我的问题是,当倒计时在第二个 View 中运行时,如果我返回第一个 View 然后点击按钮转到第二个 View ,倒计时将不再运行。

代码如下:

view1.h

#import <UIKit/UIKit.h>
#import "view2.h"

@interface view1: UIViewController

-(IBAction)nextpage:(id)sender;

@end

view1.m

@implementation view1


-(IBAction)nextpage:(id)sender
{
view2 *next=[self.storyboard instantiateViewControllerWithIdentifier:@"secondview"];
[self.navigationController pushViewController:next animated:YES];
}

@end

view2.h

@interface view2 : UIViewController
{
IBOutlet UILabel *lbl;
IBOutlet UITextField *field;

NSTimer *theTimer;
NSDate *targetDate;
NSCalendar *cal;
NSDateComponents *components;
}

@property (nonatomic,retain) IBOutlet UILabel *lbl;
@property (nonatomic,retain) IBOutlet UITextField *field;
-(IBAction)back_first_view;
@end

view2.m

@implementation view2
@synthesize lbl,field;

- (void)viewDidLoad
{
cal = [[NSCalendar currentCalendar] retain];
components = [[NSDateComponents alloc] init];
}

- (IBAction)buttonPressed:(id)sender {

if (theTimer != nil) {
return;
}

NSString *input = field.text;
NSArray *timeSplit = [input componentsSeparatedByString:@":"];
NSUInteger hours = [[timeSplit objectAtIndex:0] intValue];
NSUInteger minutes = [[timeSplit objectAtIndex:1] intValue];
NSDate *now = [NSDate date];
NSDateComponents *dateComponents = [cal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:now];
[dateComponents setHour:hours];
[dateComponents setMinute:minutes];

if (!targetDate) {
targetDate = [[cal dateFromComponents:dateComponents] retain];
}
else {
targetDate = nil;
targetDate = [[cal dateFromComponents:dateComponents] retain];
}

if ([targetDate timeIntervalSinceNow] > 0) {
theTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];
[self hideKeyboard];
}
else {
targetDate = nil;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Cannot countdown because time is before now" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}

- (void)tick {
if ([targetDate timeIntervalSinceNow] <= 0) {
//Checks if the countdown completed

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Countdown Completed" message:@"YAY! The countdown has complete" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];

return;
}
components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date] toDate:targetDate options:0];

NSInteger hours = [components hour];
NSInteger minutes = [components minute];
NSInteger seconds = [components second];

NSString *output = [NSString stringWithFormat:@"%i Hours\n%i Minutes\n%i Seconds\n", hours, minutes, seconds];
lbl.text = output;
}

- (void)hideKeyboard {
if ([field isFirstResponder]) [field resignFirstResponder];
}

- (IBAction)back_first_view
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
@end

最佳答案

将此方法更改为,

- (IBAction)nextpage:(id)sender
{
[self.navigationController pushViewController:self.next animated:YES];
}

并将第一行添加到您的 viewDidLoad 或任何此类方法中,

- (void)viewDidLoad {
[super viewDidLoad]; //Always keep super call as first call in a method
self.next = [self.storyboard instantiateViewControllerWithIdentifier:@"secondview"];
// Do any additional setup after loading the view.
}

然后在 .h 文件中声明 next @interface 为,

@interface view1 : UIViewController
{

}
@property (nonatomic, strong) view2 *next;

每次当您转到下一页时,您都在创建一个新的 view2,您需要对其进行更改。

关于ios - 弹出到 Root View 时恢复倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com