В настоящее время я разрабатываю приложение, которое ведет себя как Message.app. MasterViewController является основным видом, где он загружает таблицу имени контакта, времени и фрагмента самого последнего сообщения. Когда вы нажимаете на определенную ячейку, она переходит к DetailViewController, где она загружает сообщения, которые я отправил контакту, с последним, полным сообщением. Нажатие кнопки «Назад» возвращается к MasterViewController. Нажатие на rightBarButtonItem открывает ComposeViewController (модальный), где пользователь может составить сообщение конкретному контакту. Разница этого приложения с по умолчанию Message.app заключается в том, что он имеет таймер задержки до отправки сообщения. ComposeViewController имеет текстовое поле для ввода сообщения, кнопки для выбора контакта, кнопки для выбора временной задержки, кнопки для отправки, кнопки для отмены таймера и кнопки для отключения модуля ModalViewController.Как правильно добавлять и удалять объекты в tableview с помощью customviewviewcells?
Я удалил возможность отправлять фактическое SMS-сообщение целиком. Я просто представил пользователю предупреждение о том, что сообщение было отправлено, и если он хочет создать новый. Нажатие Cancel отменит ModalViewController и вернется к MasterViewController.
Проблема в том, что я не могу заставить строки появляться на столе, а также иметь возможность добавлять и удалять ячейки в таблице.
Вот некоторый код внутри viewDidLoad моего MasterViewController в:
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Delete button to delete messages
UIBarButtonItem *deleteBarButtonItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
target:self
action:@selector(deleteText)];
self.navigationItem.leftBarButtonItem = deleteBarButtonItem;
// Compose button to go to compose messages
UIBarButtonItem *composeBarButtonItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
target:self
action:@selector(composeText)];
self.navigationItem.rightBarButtonItem = composeBarButtonItem;
[deleteBarButtonItem release];
[composeBarButtonItem release];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *message = [defaults objectForKey:kMessageText];
NSString *contactname = [defaults objectForKey:kContactNameText];
NSString *timestamp = [defaults objectForKey:kTimeStampText];
[messageDetails initWithObjectsAndKeys:contactname, kContactNameKey, message, kContactMsgKey, timestamp, kContactTimeKey, nil];
NSMutableArray *messageInfo = [[NSMutableArray alloc] initWithObjects:messageDetails, nil];
self.messagesList = messageInfo;
[messageInfo release];
[super viewDidLoad];
Вот код в cellForRowAtIndexPath:
CustomCellViewController *customCell = (CustomCellViewController *)[tableView dequeueReusableCellWithIdentifier:@"CustomCellViewController"];
if (customCell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCellViewController"
owner:self
options:nil];
for (id oneObject in nib) if ([oneObject isKindOfClass:[CustomCellViewController class]])
customCell = (CustomCellViewController *)oneObject;
}
NSUInteger row = [indexPath row];
NSDictionary *messages = [self.messagesList objectAtIndex:row];
customCell.nameLabel.text = [messages objectForKey:kContactNameKey];
customCell.nameLabel.textColor = [UIColor whiteColor];
customCell.messageLabel.text = [messages objectForKey:kContactMsgKey];
customCell.messageLabel.textColor = [UIColor lightGrayColor];
customCell.timeLabel.text = [messages objectForKey:kContactTimeKey];
customCell.timeLabel.textColor = [UIColor blueColor];
customCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return customCell;
Вот код для удаления клеток:
- (void)tableView:(UITableView *)tableView commitEditingStyle(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// Delete the row from the data source.
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade];
[messagesList removeObjectAtIndex:indexPath.row];
[self.tableView reloadData];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
Местонахождение - это последний бит кода? Это будет создание нового экземпляра вашего контроллера главного представления, он не действует на вашу текущую главную таблицу. – jrturton
Это расположено в реализации контроллера модального представления, где вы помещаете текст в текстовое поле и нажимаете кнопку, чтобы отклонить контроллер модального представления. – jaytrixz