2012-03-16 68 views
0

我有一個View Controller,它顯示一個表視圖。該VC調用另一個VC以顯示發短信視圖給用戶,這個短信代碼VC是:呈現視圖在MFMessageComposeViewController被呈現然後被駁回後沒有正確顯示

- (void) sendSMSWithBody: (NSString*) body andRecipients: (NSArray*) recipients 
{ 
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; 
    if ([MFMessageComposeViewController canSendText]) 
    { 
     controller.messageComposeDelegate = self; 
     controller.body = body; 
     controller.recipients = recipients; 
     [[UIApplication sharedApplication].delegate.window.rootViewController addChildViewController:self]; 
     [self presentModalViewController:controller animated:YES]; 
    } 
} 

- (void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    [[UIApplication sharedApplication].delegate.window.rootViewController removeFromParentViewController];  
} 

(我知道調用sharedApplication有點哈克,但它現在就足夠了。 RootViewController的是具有設置爲表視圖控制器其根控制器)

我從表VC調用SMS VC像這樣一個UINavigationController:

- (void) viewDidAppear:(BOOL)animated 
{ 
    static BOOL presentedSMSVC = NO; 
    if (!presentedSMSVC) 
    { 
     SendSMSController *sendSMS = [[SendSMSController alloc] init]; 
     [sendSMS sendSMSWithBody:@"body" 
        andRecipients:[NSArray arrayWithObject:@"123456789"]]; 
     presentedRegisterVC = YES; 
    } 
} 

的問題是,在用戶發送SMS表格視圖單元格不顯示。

我想也許我需要刷新視圖/表,所以我添加了從第二個VC協議回調到第一個,當用戶發送SMS時調用,然後在回調調用[self.tableView reloadData]但它沒有任何區別。

所以我擺脫了中介類和編輯表視圖中直接顯示短信看法是這樣的:

- (void) viewDidAppear:(BOOL)animated 
    { 
    static BOOL presentedRegisterVC = NO; 
    if (!presentedRegisterVC) 
    { 
     MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; 
     if ([MFMessageComposeViewController canSendText]) 
     { 
      controller.messageComposeDelegate = self; 
      controller.body = @"body"; 
      controller.recipients = [NSArray arrayWithObject:@"12345678"]; 
      [self presentModalViewController:controller animated:NO]; 
     } 
    } 
} 


- (void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result 
{ 
    [self dismissModalViewControllerAnimated:NO];  
} 

但現在MFMessageComposeViewController不解僱(雖然messageComposeViewController:didFinishWithResult:不會被調用)

這兩種方法有什麼問題?感謝

+0

我也嘗試改變目前和解僱行[self.navigationController presentModalViewController和解僱]但它仍然不會解僱第二個更新的變體。 – Gruntcakes 2012-03-16 20:06:49

回答

0

對於第二個變型中,我已變更爲:

[自presentViewController:控制器動畫:是完成:無]; [self dismissViewControllerAnimated:YES completion:nil];

而且工作,還沒有嘗試應用到第一種方法。

+0

即使使用第二個變體,我也可以消除模態視圖,但仍然主視圖控制器不重繪其視圖。我懷疑機器只能與正確設置parentViewController屬性的類一起工作,如UINavigationController,以便通知某個父控制器進行必要的操作。例如,旋轉窗口(通過旋轉設備)導致主視圖再次被重新繪製。 – lef 2013-11-11 16:42:28

0

我遇到過類似的用戶界面問題。 我的情況是:控制器,我們說控制器A,其中我寫了代碼來呈現和解僱MFMessageComposeController,並沒有被直接用作主動控制器,而是我使用A.view作爲另一個控制器的子視圖,說控制器B.於是編寫以下是扭曲的觀點:

[self presentViewController:composeVC animated:YES completion:nil]; 

但隨後寫了以下解決我的問題:

[self.customTabbarNavigation presentViewController:composeVC animated:YES completion:nil]; 

的customTabbarNavigation,是控制器B,ANS竟是導航控制器當控制器A的視圖可見時這是活躍的。

對於解散組合VC必須做出同樣的改變。