2013-12-11 54 views
0

這是接收消息的ChatViewController.m,然後顯示在tableView中。 現在當消息的發送者改變時,我想給用戶選擇切換到新消息(alert view)。如果用戶點擊開關,如何顯示消息?如何用新數據刷新我的UIViewController?

這是如何接收和顯示消息。

-(void)recvdMsg:(NSDictionary *)msg 
{ 
    NSString *currentUser = [msg objectForKey:@"sender"]; 
    NSString *match = @"@"; 
    NSString *preAt ; 
    NSScanner *scanner = [NSScanner scannerWithString:currentUser]; 
    [scanner scanUpToString:match intoString:&preAt]; 

    if (self.name == preAt) //same sender 
    { 
    NSMutableDictionary *newMsg=[[NSMutableDictionary alloc]init]; 
    NSString *m = [msg objectForKey:@"msg"]; 
    [newMsg setObject:m forKey:@"message"]; 
    [newMsg setObject:converID forKey:@"conversationID"]; 
    [newMsg setObject:@"1" forKey:@"FromTo"]; 
    NSDate *today=[NSDate date]; 

    // Convert string to date object 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MM-dd-yyyy HH:mm:ss"]; 
    NSString *dt=[dateFormat stringFromDate:today]; 
    [newMsg setObject:dt forKey:@"timeStamp"]; 
    [self AddMessage:newMsg]; // adding to database. 
    NSBubbleData *heyBubble = [NSBubbleData dataWithText:m date:[NSDate date] type:BubbleTypeSomeoneElse]; 
    [bubbleData addObject:heyBubble]; 
    [bbltblView reloadData]; 
    [bbltblView scrollBubbleViewToBottomAnimated:YES]; 
} 
else  //message from new sender 
{ 
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"New Message from " message:preAt delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Switch", nil]; 
} 

} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0) // cancel button clicked 
{ 
    return; 
} 
else { 

    // switch button is clicked....How to go from here.....how would i reload data? 
} 
} 
+3

使用'[實現代碼如下reloadData];'。更新您的數據源後 –

+0

如果您想要顯示來自新用戶的消息,然後在警報切換代碼中刪除bubbleData中的所有對象並僅添加新用戶的消息(如果希望來自bubbleData中的所有用戶的數據,但只是想要顯示消息,然後在關鍵「發件人」的bubbleData上應用謂詞,並使用過濾的數組在tableview中顯示數據,不要忘記爲tableview調用reloadData。 –

+0

請幫助一些示例代碼。 – icodes

回答

0

您可以實現alertView委託

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    if(buttonIndex != alertView.cancelButtonIndex) { 
     // Switch action, Write your logic to reload you data 
    } 
    } 
+0

到目前爲止,我知道如何顯示警報視圖,並獲取用戶單擊哪個按鈕的操作,問題是如何顯示數據。 – icodes

+0

您可以在此處使用相同的代碼,用於加載當前聊天夥伴的數據。 –

+0

所以我需要在字典屬性中複製消息,以便在另一種方法中使用它我猜... – icodes

1

如下

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) //OK Button 
    { 
     //ok button code 
    } 
    else //Switch Button 
    { 
     //switch button code 
     [tableview reloadData]; 
    } 
} 
+0

我不認爲[tableview reloadData]會給我任何東西在我的情況下,因爲我在上面的if語句中的表視圖提供數據,並在其他stmt我顯示警報視圖。 – icodes

0

那麼同樣的事情,你需要在你else條件遵循還有,你有你可以實現alertview委託方法An Iteraitve在你的上述if條件中完成。意味着你又不得不refresharray,然後再需要reloadtableview用於填充新的數據是這樣如下: -

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) //OK Button 
    { 
     //ok button code 
    } 
    else //Switch Button 
    { 
     // when switch button is clicked....write below for reloading the data 
    [bubbleData addObject:heyBubble];// here heyBubble will be your new data 
    [bbltblView reloadData]; 
    } 
}