1.<<iphone开发基础教程>>4.7实现按钮,操作表,警报.
2。UIAlertView示例
UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:@"cancel"
otherButtonTitles:@"other1",@"other2",@"other3",@"other4",nil];
[alert autorelease];
NSArray* vArray=[alert subviews];
for(UIView* v in vArray)
{
NSLog(@"tag:%d,%@",v.tag,[[v class] description]); }
[alert show];
打印出
tag:0,UILabel
tag:0,UILabel
tag:1,UIThreePartButton
tag:2,UIThreePartButton
tag:3,UIThreePartButton
tag:4,UIThreePartButton
tag:5,UIThreePartButton
在界面上的排列顺序从上到下是 other1....cancel.
3.
UIAlertView中带有输入框时,
#pragma mark UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[self resignFirstResponder];//加上这句可隐藏键盘,否则隐藏不了。但此时UIAlertView降到屏幕中间,默认它在屏幕上部显示。
return YES;
}
//设置弹出框在屏幕上的位置
//[dialog_ setTransform:CGAffineTransformMakeTranslation(0.0, 20.0)];
在- (void)willPresentAlertView:(UIAlertView *)alertView; // before animation and showing view中可以修改对话框的样式;
typedef enum {
UIAlertViewStyleDefault = 0,
UIAlertViewStyleSecureTextInput,
UIAlertViewStylePlainTextInput,
UIAlertViewStyleLoginAndPasswordInput
} UIAlertViewStyle; //Available in iOS 5.0 and later.
4.如果要使用多个按钮,考虑使用UIActionSheet,在UIAlertView中竖排的按钮看起来不够简练。
UIAlertView中高亮的按钮只有Cancel按钮,它一般出现在UIAlertView的左边或底部。并且它的index始终为0。但在UIActionSheet中不是一直为0。
但系统的删除程序提示却,删除在左,取消在右。
提示:如果要在一个回调函数中处理多个警告框事件,可以设置标记。
另一种管理UIAlertView内存的方法是,在回调中释放它。
5.使用run循环创建直接返回的模态警告框。
6.UIActionSheet
它的按钮的索引值从上向下,从0开始递增。
使用showInView,在视图中从下向上弹出式显示;另外还有showFromToolBar,showFromTabBar。
7.UIMenuController
(1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES
(2. Menu所处的View必须实现 – (BOOL)canPerformAction:withSender, 并根据需求返回YES或NO
(3. 使Menu所处的View成为First Responder (becomeFirstResponder)
(4. 定位Menu (- setTargetRect:inView:)
(5. 展示Menu (- setMenuVisible:animated:)
8. UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Change Color" action:@selector(changeColor:)];
NSArray* menuItems=[NSArray arrayWithObject:menuItem];
UIMenuController *menuController = [UIMenuController sharedMenuController];
[menuController setTargetRect:self.frame inView:self.superview];
menuController.arrowDirection = UIMenuControllerArrowLeft;
menuController.menuItems =menuItems;
[menuController setMenuVisible:YES animated:YES];
9 . 在UIWebView上追加菜单项
(1) //添加“选中回复”菜单项到sharedMenuController
UIMenuItem* menuItem0 = [[[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"回复",nil) action:@selector(copyAndReply)] autorelease];
NSArray* menuItemarray = [NSArray arrayWithObjects:menuItem0,nil];
UIMenuController* sharedMenuController = [UIMenuController sharedMenuController];
[sharedMenuController setMenuItems:menuItemarray]; // default is nil. these are in addition to the standard items
(2)//当sharedMenuController被显示时,系统会询问当前UIViewController的canPerformAction方法,菜单项的显示情况。
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(copyAndReply))
{
return YES;//表示可以显示此项
}
return [super canPerformAction:action withSender:sender]; //或return NO;
}
(3)//实现这个方法,处理点击后的操作
-(void)copyAndReply
{
NSString* content=[webView_ stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString();"];
// ...
}
10.关闭Alert
-(void)dismissAlertView
{
UIWindow* keyWindow=[UIApplication sharedApplication].keyWindow;
if([keyWindow isKindOfClass:NSClassFromString(@"_UIAlertOverlayWindow")])
{
NSArray *subViews = [keyWindow subviews];
for (UIView* subview in subViews)
{
[self dismissAlertInView:subview];
}
}
}
-(void)dismissAlertInView:(UIView*)view
{
if ([view isKindOfClass:[UIAlertView class]])
{
UIAlertView *alertView = (UIAlertView *)[view retain];
[alertView dismissWithClickedButtonIndex:alertView.cancelButtonIndex animated:NO];
[alertView release];
}
else if ([view isKindOfClass:[UIActionSheet class]])
{
UIActionSheet *alertView = (UIActionSheet *)[view retain];
[alertView dismissWithClickedButtonIndex:alertView.cancelButtonIndex animated:NO];
[alertView release];
}
else
{
NSArray* subviews = [view subviews];
for (UIView* subview in subviews)
{
[self dismissAlertInView:subview];
}
}
}