私は現在、Messages.appのように動作するアプリケーションを開発しています。 MasterViewControllerは、連絡先の名前、時刻、最新のメッセージのスニペットのテーブルをロードするメインビューです。特定のセルをタップするとDetailViewControllerに移動し、連絡先に送信したメッセージを最新の完全なメッセージでロードします。戻るボタンを押すと、MasterViewControllerに戻ります。 rightBarButtonItemをタップすると、ユーザーが特定の連絡先へのメッセージを作成できるComposeViewController(モーダル)が開きます。このアプリとデフォルトのMessages.appとの違いは、メッセージを送信する前に遅延タイマーがあることです。 ComposeViewControllerには、メッセージを入力するテキストフィールド、連絡先を選択するボタン、時間遅延を選択するボタン、送信するボタン、タイマーをキャンセルするボタン、およびModalViewControllerを閉じるボタンがあります。カスタムtableviewcellsでテーブルビューにオブジェクトを追加したり削除したりするにはどうすればいいですか?
実際のSMSメッセージを完全に送信する機能を削除しました。私はちょうどメッセージを送ったと彼/彼女は新しいものを作成したい場合、彼/彼女に伝えるアラートビューをユーザーに提示しました。 Cancelを押すと、ModalViewControllerが終了し、MasterViewControllerに戻ります。
問題は、テーブルに行を表示させることはできず、テーブル内のセルを追加したり削除したりすることもできません。ここで
は私MasterViewControllerののviewDidLoad内のいくつかのコードです:
[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