具有交互功能的对话框AlertDialog
对话框常用于“程序提示”、“警告”或“确认”等,主要目的是与User确认及互动,在User Interface中是必须要学会的技巧之一。
在Android SDK中,虽然有许多的窗口,有些类似Modeless窗口、有些类似于前段Force Focus的窗口,但真正具有交互的则为AlertDialog对话窗口。
下面我们来实现一个AlertDialog对话框,主要代码如下:
button01.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); //设置标题 builder.setTitle(R.string.app_name); //设置图标 builder.setIcon(R.drawable.ic_launcher); //设置显示信息 builder.setMessage("是否跳转到第二个activiry?"); //添加确定按钮 builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(getApplicationContext(), activity2.class); Bundle bundle = new Bundle(); bundle.putBoolean("sex", true); intent.putExtras(bundle); startActivityForResult(intent, 0); } }); //添加取消按钮 builder.setNegativeButton("取消 ", new OnClickListener() { public void onClick(DialogInterface dialog, int which) {} }); builder.show(); } });
源码下载:具有交互功能的对话框AlertDialog
Testin云测试介绍: 免费的移动App应用真机自动化云测试
详见:http://www.testin.cn
录制脚本,提交测试
通过代码创建
一个UINavigationcontroller包括 navigation bar,可选的navigation toolbar,RootViewController.
2.导航栈有四个方法
- – pushViewController:animated:
- – popViewControllerAnimated:
- – popToRootViewControllerAnimated:
- – popToViewController:animated:
-
例如,想推进一个新的viewcontroller,到导航栈中,代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:YES];//1. DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil]; [self.navigationController pushViewController:detailsViewController]; [detailsViewController release]; }
-
这里有两个需要注意的地方
-
1.进入下一个页面的时候,table中的选择行要取消。
-
2.记得release要push的controller.因为导航栈是retain的。
可能大家想直接访问navigationcontroller 的navigation bar。但是通常我们不这样做。而是维护每个viewcontroller的 navigation item。
这里不要将navigation item 与 navigation bar 混淆,navigation item不是UIView的子类。它是一个用来更新navigtion bar的存储信息的类。
还是上代码说明:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:YES]; Person *person; // Some code that sets person based on the particular cell that was selected DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil]; detailsViewController.navigationItem.title = person.name; [self.navigationController pushViewController:detailsViewController]; [detailsViewController release]; }
detailsViewController.navigationItem.title = person.name;这句话的意思就是把二级界面的导航标题设置成person.name
要注意两点:1.我们并没有直接操作navigation bar 2.在push 新的controller之前设置标题(在新的view之中也可以设置)
当新的detailcontroller被push后,UINavigationController会自动更新navigation bar。
4.返回按钮默认情况下,当你将一个新的viewcontroller推入栈的时候,返回按钮将显示前一个页面的controller的 navigation item的title。
如果想定制返回按钮的标题还有事件的话,可以用以下代码。
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backButton; [backButton release];
注意,这里的self是第一级的view controller。这样的话第二级的页面将显示“Back”
ps:最新发现, self.navigationItem.leftBarButtonItem 可以设置当前页面的左侧的按钮。这个需要再当前页面实现,而不是上一级页面。
5.左右按钮navigation item还有两个属性leftBarButtonItem rightBarButtonItem。
一般leftBarButtonItem只出现在RootviewController中使用,因为其他页面一般都显示一个返回按钮。
UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStylePlain target:self action:@selector(handleSettings)]; self.navigationItem.rightBarButtonItem = settingsButton; [settingsButton release];
这会在右侧添加一个“Setting”的按钮,并触发handleSetting事件。
6.在首页隐藏Navigation Bar在RootViewController.m中实现如下:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:YES]; }
这篇文章翻译自http://www.iosdevnotes.com/2011/03/uinavigationcontroller-tutorial/