2013-12-11 8 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

Используйте '[TableView reloadData];'. после обновления вашего источника данных –

+0

Здесь, в случае нового пользователя, если вы хотите отображать сообщения только от нового пользователя, тогда в окне кода предупреждения удалите все объекты из bubbleData и добавьте только сообщение нового пользователя, если вы хотите получать данные от всех пользователей в bubbleData, но просто хотите отображать сообщения, а затем применять предикат на bubbleData на ключе «отправитель» и использовать фильтрованный массив для отображения данных в табличном представлении, не забудьте вызвать reloadData для tableview. –

+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

можно реализовать alertview делегата metnod ниже

- (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 состоянии, а также которые у вас есть сделанное в вышеуказанных if condiiton. Значит снова вы должны refresh ваш array, а затем снова вам нужно reload ваш tableview для заполнения новых данных, как это показано ниже: -

- (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]; 
    } 
} 
Смежные вопросы