UIAlertView,UIActionSheet, UIMenuController

本文详细介绍了UIAlertView和UIActionSheet的使用方法,包括UIAlertView的基本配置、按钮布局、输入框处理及位置设置等内容,并对比了UIAlertView与UIActionSheet的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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];
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值