Я работаю над приложением, где я хочу отображать таблицуView, заполненную пользователями, а когда выбрана строка, отображается новое представление, содержащее беседу (так, в основном, приложение для обмена сообщениями). На данный момент я просто хочу, чтобы, когда я касался строки на моем FirstViewController, SecondViewController отображается с именем пользователя, выбранного на ярлыке. Но я не могу заставить его работать, потому что каждый раз, когда я касаюсь строки, indexPath равно 0, si это всегда первое имя пользователя, которое отображается. Вот часть моего кода:Передача данных через segue на tableView
#import "GSBChatViewController.h"
#import "GSBConversationViewController.h"
@interface GSBChatViewController()
@property (weak, nonatomic) IBOutlet UITableView *userTableView;
@end
@implementation GSBChatViewController
@synthesize chatUsers;
- (void)viewDidLoad {
[super viewDidLoad];
GSBChatUsers *user1 = [[GSBChatUsers alloc]initWithName:@" John DOE" andPicture:@"photo.jpg" andLastMessage:@"Ca marche!"];
GSBChatUsers *user2 = [[GSBChatUsers alloc]initWithName:@"Justine DUBOIS" andPicture:@"photo.jpg" andLastMessage:@"Salut, ça va?"];
GSBChatUsers *user3 = [[GSBChatUsers alloc]initWithName:@"Jacques LAPORTE" andPicture:@"photo.jpg" andLastMessage:@"Réunion le 23 à 15h, c'est bon pour toi?"];
GSBChatUsers *user4 = [[GSBChatUsers alloc]initWithName:@"Guillaume DUPOND" andPicture:@"photo.jpg" andLastMessage:@"OK, parfait"];
GSBChatUsers *user5 = [[GSBChatUsers alloc]initWithName:@"Françoise MARTIN" andPicture:@"photo.jpg" andLastMessage:@"Tu as posé tes congés?"];
GSBChatUsers *user6 = [[GSBChatUsers alloc]initWithName:@"Jean-Jacques CELESTIN" andPicture:@"photo.jpg" andLastMessage:@"Je prends note"];
chatUsers = [[NSArray alloc]initWithObjects:user1,user2,user3,user4,user5,user6, nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSIndexPath *indexPath = [self.userTableView indexPathForCell:sender];
NSLog(@"Path: %@",indexPath);
GSBConversationViewController *destVC = [segue destinationViewController];
GSBChatUsers *selectedUser =[chatUsers objectAtIndex:indexPath.row];
NSLog(@"%ld",[self.userTableView indexPathForCell:sender].row);
NSString *userName = selectedUser.name;
NSLog(userName);
destVC.Test=userName;
}
#pragma mark - Datasource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Retourne le nombre d'éléments de notre liste
NSLog(@"Number of rows: %ld",chatUsers.count);
return [chatUsers count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
// Instancie notre cellule par son identifier
GSBTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"userCell"];
// On récupère l'item que l'on va traiter
GSBChatUsers *user = [chatUsers objectAtIndex:indexPath.row];
// On affecte les valeurs de notre user aux éléments de notre cellule
[cell.userName setText:user.name];
[cell.profilePicture setImage:[UIImage imageNamed:user.picture]];
[cell.lastMessage setText:user.lastMessage];
NSLog(@"%@",chatUsers);
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"%@",_cellTitle);
//[self performSegueWithIdentifier:@"conversationSegue" sender:[chatUsers objectAtIndex:indexPath.row]];
}
@end
Я смотрел на this answer, а также this one, но ни один из них не помог. (Ну, они помогли, потому что заранее я даже не мог изменить текст ярлыка).
Отказ от ответственности: Это касается школьного проекта, и я на сто процентов разрешаю обратиться за помощью в Интернет. Поскольку английский не мой родной язык, может быть, я не понимаю некоторых моментов, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Благодарим за помощь!
так вы проводной вверх SEGUE от 'FirstViewController' к' SecondViewController' с помощью перетаскивания и падения в раскадровке? –
@ AndréSlotta Да, из ячейки прототипа firstViewController на secondViewController – nommis
ну в этом случае вам не нужен 'didSelectRowMethod', а просто' prepareForSegue'. и в 'prepareForSegue' он всегда печатает строку ** 0 ** прямо сейчас? –