1

如果有人使用过 iPhone 的 SMS 应用程序,那么在撰写视图中会有一个特殊的动画。

当您第一次按下 compose 时,会显示一个模态视图控制器。但是,一旦您按下发送,它就会转移到您的聊天视图控制器。但这里有一些奇怪的行为:

1)键盘保持完好。通常,当您弹出并推动新控制器时,您会丢失键盘位置。

2)进一步的证据表明没有弹出/推送新控制器,因为实际视图没有改变。只要您按下发送,消息就会“滑动”到气泡视图。

3)但是,如果真的没有弹出/推送控制器,你如何改变导航栏上的按钮?左上角的按钮也从方形的“取消”按钮变为箭头状的后退按钮。

任何想法如何实现这种体验?

4

2 回答 2

0

实际上,我已经为我的一个应用程序实现了一个非常相似的 UI。这是如何做到的:

主控件是一个 UITableView。顶部“通话”和“添加到联系人”的两个按钮是表格视图标题视图。

每个单元格由 8 个不同的图像绘制而成。- 每个角落一个。- 一种拉伸并填充左上角和右上角之间的间隙。- 一种拉伸并填充左上角和左下角之间的间隙。- 一种拉伸并填充右上角和右下角之间的间隙。- 一种伸展并填补左中和右中之间的空隙。- 一种拉伸并填充左下角和右下角之间的间隙。

于 2009-06-20T00:56:06.123 回答
0

您可以在视图控制器中更改导航栏的特征。您还可以通过直接更改 viewController.view 来更改屏幕的外观。在此示例中,当用户按下发送时,您可以使用以下代码更改导航栏:

UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:[NSString stringWithFormat:@"Messages:(%i)", messageCount] style:UIBarButtonStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = back;
[back release];
UIBarButtonItem *edit = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:plain target:self action:@selector(editMessage)];
self.navigationItem.rightBarButtonItem = edit;
[edit release]

然后你实现editMessage:

- (void)editMessage {
  //Go into edit mode, whatever that code looks like.
}

然后,在您点击发送后,他们根本无法调用 [self.textField resignFirstResponder],因此键盘保持在那里。您会注意到,如果您加载旧对话,则视图会加载屏幕底部的发送框且没有键盘。这符合 UITextField 对象的标准行为。

UIView 的帮助文件中解释了直接入侵视图,这可能会很痛苦。老实说,我不确定他们是如何绘制漂亮的 IM 界面的,我将把它留给另一位专家。

于 2009-06-19T21:24:10.233 回答