从Iphone中的SecondViewController显示一个方法的FirstViewContr
发布时间:2020-12-14 19:12:44 所属栏目:百科 来源:网络整理
导读:其实我正在制作一个报警应用程序.当我设置时间UILocalNotification事件发生在那时,它调用AppDelegate类的方法,即didReceiveNotifications方法.在这个方法中,我已经编写了一个代码来调用SetViewController的方法(showReminder方法),现在在这个方法中,我希望它
其实我正在制作一个报警应用程序.当我设置时间UILocalNotification事件发生在那时,它调用AppDelegate类的方法,即didReceiveNotifications方法.在这个方法中,我已经编写了一个代码来调用SetViewController的方法(showReminder方法),现在在这个方法中,我希望它应该显示一个NewViewController,即TimeViewController,因为我必须在Alarm Invokes时显示动画.
我需要这个当闹钟调用时我已经设置了一个动作表来显示但是我也想显示动画.动作表出现在所有视图中但是动画可以仅显示在特定视图中,这就是为什么我需要显示不同的ViewController. 这是我正在尝试的代码: – 几乎整个代码: – AppDelegate类: – - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { if (notification){ NSLog(@"In did Notification"); NSString *reminderText = [notification.userInfo objectForKey:kRemindMeNotificationDataKey]; [viewController showReminder:reminderText]; application.applicationIconBadgeNumber = 0; } } setViewController.h: – @interface SetAlarmViewController : UIViewController <UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate,UIActionSheetDelegate>{ IBOutlet UITableView *tableview; IBOutlet UIDatePicker *datePicker; IBOutlet UITextField *eventText; TPKeyboardAvoidingScrollView *scrollView; IBOutlet UINavigationBar *titleBar; IBOutlet UIButton *setAlarmButton; AVAudioPlayer *player; int index; The420DudeAppDelegate *appDelegate; TimeViewController *viewController; IBOutlet UIImageView *animatedImages; NSMutableArray *imageArray; AVPlayerItem *player1,*player3; AVPlayerItem *player2,*player4; AVQueuePlayer *queuePlayer; } @property (nonatomic,retain) IBOutlet UIImageView *animatedImages; @property (nonatomic,retain) IBOutlet UITableView *tableview; @property (nonatomic,retain) IBOutlet UIDatePicker *datePicker; @property (nonatomic,retain) IBOutlet UITextField *eventText; @property (nonatomic,retain) TPKeyboardAvoidingScrollView *scrollView; @property(nonatomic,retain) IBOutlet UINavigationBar *titleBar; @property(nonatomic,retain) IBOutlet UIButton *setAlarmButton; @property(nonatomic) UIReturnKeyType returnKeyType; @property(nonatomic,retain) IBOutlet TimeViewController *viewController; - (IBAction) scheduleAlarm:(id)sender; - (void)showReminder:(NSString *)text; -(IBAction)onTapHome; -(IBAction)onTapChange:(id)sender; @end SetViewController.m: – @synthesize datePicker,tableview,eventText,titleBar,setAlarmButton,returnKeyType,scrollView,animatedImages,viewController; // Implement viewDidLoad to do additional setup after loading the view,typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; appDelegate = (The420DudeAppDelegate *)[[UIApplication sharedApplication] delegate]; eventText.returnKeyType = UIReturnKeyDone; viewController = [[TimeViewController alloc] initWithNibName:@"TimeViewController" bundle:nil]; NSDate *now = [NSDate date]; [datePicker setDate:now animated:YES]; eventText.delegate = self; index = 0; NSString *path1 = [[NSBundle mainBundle] pathForResource:@"inhale" ofType:@"mp3"]; NSURL *url1 = [NSURL fileURLWithPath:path1]; player1 = [[AVPlayerItem alloc]initWithURL:url1]; NSString *path3 = [[NSBundle mainBundle] pathForResource:@"sound1" ofType:@"wav"]; NSURL *url3 = [NSURL fileURLWithPath:path3]; player3 = [[AVPlayerItem alloc]initWithURL:url3]; NSString *path2 = [[NSBundle mainBundle] pathForResource:@"exhale" ofType:@"mp3"]; NSURL *url2 = [NSURL fileURLWithPath:path2]; player2 = [[AVPlayerItem alloc]initWithURL:url2]; NSString *path4 = [[NSBundle mainBundle] pathForResource:@"Dude" ofType:@"mp3"]; NSURL *url4 = [NSURL fileURLWithPath:path4]; player4 = [[AVPlayerItem alloc]initWithURL:url4]; NSArray *items = [[NSArray alloc]initWithObjects:player1,player3,player2,player4,nil]; queuePlayer = [[AVQueuePlayer alloc] initWithItems:items]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playEnded) name:AVPlayerItemDidPlayToEndTimeNotification object:player4]; } -(void)onAlarmInvoke { animatedImages = [[UIImageView alloc] initWithFrame:CGRectMake(0,320,100)]; animatedImages.userInteractionEnabled = YES; [animatedImages setContentMode:UIViewContentModeScaleToFill]; [self.view addSubview : animatedImages]; [queuePlayer play]; // Array to hold jpg images imageArray = [[NSMutableArray alloc] initWithCapacity:IMAGE_COUNT]; // Build array of images,cycling through image names for (int i = 1; i <= IMAGE_COUNT; i++) [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"animation(%d).jpg",i]]]; animatedImages.animationImages = [NSArray arrayWithArray:imageArray]; // One cycle through all the images takes 1.0 seconds animatedImages.animationDuration = 12.0; // Repeat foreverlight electro / 4 sec. animatedImages.animationRepeatCount = -1; // Add subview and make window visible // [self.view addSubview:animatedImages]; animatedImages.image = [imageArray objectAtIndex:imageArray.count - 1]; // Start it up [animatedImages startAnimating]; // Wait 5 seconds,then stop animation [self performSelector:@selector(stopAnimation) withObject:nil afterDelay:15000]; } -(void)playEnded { [self performSelector:@selector(playNextItem) withObject:nil afterDelay:5.0]; } -(void)playNextItem { [queuePlayer play]; } -(void)textFieldDidBeginEditing:(UITextField *)textField { [scrollView adjustOffsetToIdealIfNeeded]; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:YES]; [self.tableview reloadData]; } - (IBAction) scheduleAlarm:(id)sender { [eventText resignFirstResponder]; // Get the current date NSDate *pickerDate = [self.datePicker date]; // NSDate *selectedDate = [datePicker date]; // you don't need to alloc-init the variable first NSCalendar *cal = [NSCalendar currentCalendar]; NSDateComponents *dc = [cal components: (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:pickerDate]; pickerDate = [cal dateFromComponents:dc]; NSLog(@"%@ is the date in picker date",pickerDate); UILocalNotification *localNotif = [[UILocalNotification alloc] init]; if (localNotif == nil) return; localNotif.fireDate = pickerDate; // NSLog(@"%@",localNotif.fireDate); localNotif.timeZone = [NSTimeZone defaultTimeZone]; // NSLog(@"%@",localNotif.timeZone); // Notification details localNotif.alertBody = [eventText text]; // Set the action button localNotif.alertAction = @"Show me"; localNotif.repeatInterval = NSDayCalendarUnit; localNotif.soundName = @"jet.wav"; // Specify custom data for the notification NSDictionary *userDict = [NSDictionary dictionaryWithObject:eventText.text forKey:kRemindMeNotificationDataKey]; localNotif.userInfo = userDict; // Schedule the notification [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; [localNotif release]; [self.tableview reloadData]; eventText.text = @""; viewController = [[TimeViewController alloc] initWithNibName:@"TimeViewController" bundle:nil]; [self presentModalViewController:viewController animated:YES]; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { index = indexPath.row; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Warning!!!" message:@"Are you sure you want to Delete???" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok",nil]; [alertView show]; [alertView release]; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; UILocalNotification *notify = [notificationArray objectAtIndex:index]; if(buttonIndex == 0) { // Do Nothing on Tapping Cancel... } if(buttonIndex ==1) { if(notify) [[UIApplication sharedApplication] cancelLocalNotification:notify]; } [self.tableview reloadData]; } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; } // Configure the cell... NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; UILocalNotification *notif = [notificationArray objectAtIndex:indexPath.row]; [cell.textLabel setText:notif.alertBody]; [cell.detailTextLabel setText:[notif.fireDate description]]; return cell; } - (void)viewDidUnload { datePicker = nil; tableview = nil; eventText = nil; [self setScrollView:nil]; [super viewDidUnload]; } - (void)showReminder:(NSString *)text { [self onAlarmInvoke]; [self.view addSubview:viewController.view]; UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Cancel" otherButtonTitles:nil]; [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent]; CGRect rect = self.view.frame; // if(rect.origin.y <= 480) // rect.origin.y +=20; self.view.frame = rect; [actionSheet showInView:self.view]; [actionSheet release]; } - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { if(buttonIndex == 0) { [player stop]; NSLog(@"OK Tapped"); } if(buttonIndex == 1) { [player stop]; NSLog(@"Cancel Tapped"); } } -(IBAction)onTapHome{ viewController = [[TimeViewController alloc] initWithNibName:@"TimeViewController" bundle:nil]; [self presentModalViewController:viewController animated:YES]; } - (void)dealloc { [super dealloc]; [datePicker release]; [tableview release]; [eventText release]; [scrollView release]; } -(IBAction)onTapChange:(id)sender{ SetTimeViewController *viewC = [[SetTimeViewController alloc]initWithNibName:@"SetTimeViewController" bundle:nil]; [self presentModalViewController:viewC animated:YES]; } @end 解决方法
您的viewController可能正在显示视图,但如果没有屏幕上的SetViewController视图则无法看到它.您必须首先转到SetViewController,然后展示您的TimeViewController.这是正确的,您想要显示SetViewController但是立即调用showReminder:方法吗?但只能从didReceiveLocalNotification:
如果是这种情况,请在SetViewControllers .h中设置标志和文本属性, BOOL isFromNotification; NSString *notifText; 并呈现SetViewController,并设置标志 SetViewController *setViewController = [SetViewController alloc]........ setViewController.isFromNotification = YES; setViewController.notifText = reminderText; [self presentModalViewController animated:YES} 然后在viewDidAppear:SetViewController中 if(isFromNotification = YES){ [self showReminders:notifText]; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |