视图中的文本消息窗口DidLoad 在所有其他内容之后弹出



我在视图控制器的viewDidLoad方法实现中设置了一个文本消息窗口。如果特定的 NSString 对象包含"YES",那么我调用我的短信窗口的方法,它会弹出。

所有这些都工作正常,唯一的问题是我的短信方法调用实际上是我的 viewDidLoad 中的第一件事,但由于某种原因,在执行 viewDidLoad 中的其他所有内容后,文本消息窗口会弹出。

在我的viewDidLoad中,在文本消息窗口代码下方,我设置并启动了一个AVCapture会话,并创建了一个显示相机看到的内容的"预览层"。

即使此代码位于文本消息窗口代码下方,您也可以在弹出文本消息窗口之前看到相机的预览层几秒钟。

这是我的视图DidLoad方法实现。请注意,我的短信窗口方法调用[self showSMS]首先是其他所有内容:

- (void)viewDidLoad
{
[super viewDidLoad];
if([_justFinishedSigningUp isEqual:@"YES"]) {
[self showSMS];        
}

if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
// iOS 7
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
} else {
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}

_session =[[AVCaptureSession alloc]init];

[_session setSessionPreset:AVCaptureSessionPresetPhoto];

_inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

NSError *error;

_deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:_inputDevice error:&error];

if([_session canAddInput:_deviceInput])
[_session addInput:_deviceInput];

_previewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:_session];

CALayer *rootLayer = [[self view]layer];
[rootLayer setMasksToBounds:YES];

[_previewLayer setFrame:CGRectMake(0, 0, rootLayer.bounds.size.width, rootLayer.bounds.size.height/2)];
[_previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

[rootLayer insertSublayer:_previewLayer atIndex:0];

_stillImageOutput = [[AVCaptureStillImageOutput alloc] init];

[_session addOutput:_stillImageOutput];
[_session startRunning];
}

然后,以下是帮助控制文本消息窗口的方法实现:

- (void)showSMS {
if(![MFMessageComposeViewController canSendText]) {
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Your device doesn't support SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[warningAlert show];
return;
}
NSArray *recipents = _usersToInviteToApp;
NSString *message = _textMessageInviteText;
MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.messageComposeDelegate = self;
[messageController setSubject:@"New Message"];
[messageController setRecipients:recipents];
[messageController setBody:message];
// Present message view controller on screen
[self presentViewController:messageController animated:YES completion:nil];
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult) result
{
switch (result) {
case MessageComposeResultCancelled:
break;
case MessageComposeResultFailed:
{
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to send SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[warningAlert show];
break;
}
case MessageComposeResultSent:
break;
default:
break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}

您正在将某些内容加载到视图中,viewDidLoad中的animated:YES,这甚至在屏幕上出现任何内容之前就发生了([self presentViewController:messageController animated:YES completion:nil];)

您是否尝试过将所有内容移动到viewDidAppear,或者,如果您希望在查看所有内容之前将屏幕移动到那里,请尝试在-(void)showSMS方法中设置animated:NO

最新更新