您的位置:首页 > 产品设计 > UI/UE

iPhone开发之动态添加UIActionSheet按钮

2012-07-16 09:36 495 查看


iPhone开发之动态添加UIActionSheet按钮bynewbility

上次谈到了UIActionSheet的使用,今天说说动态添加UIActionSheet按钮。

一、UIActionSheet的通常实现方法:

-(void)testActionSheetStatic{

UIActionSheet*sheet=[[UIActionSheetalloc]initWithTitle:@“StaticUIActionSheet”

delegate:self

cancelButtonTitle:@“Cancel”

destructiveButtonTitle:nil

otherButtonTitles:@“ItemA”,@“ItemB”,@“ItemC”,nil];

[sheetshowFromRect:view.boundsinView:viewanimated:YES];

[sheetrelease];

}





二、如果事先知道各个按钮并且再也不会改变的情况下,这样的实现是OK的。但如果我要在运行时改变应该怎么办呢?动态添加按钮看起来应该也很简单,不要init函数中指定而在之后添加可以了,如下代码就展示了这点。

-(void)testActionSheetDynamic{

//创建时仅指定取消按钮

UIActionSheet*sheet=[[UIActionSheetalloc]initWithTitle:@“DynamicUIActionSheet”delegate:self

cancelButtonTitle:@“Cancel”

destructiveButtonTitle:nil

otherButtonTitles:nil];

//逐个添加按钮(比如可以是数组循环)

[sheetaddButtonWithTitle:@"ItemA"];

[sheetaddButtonWithTitle:@"ItemB"];

[sheetaddButtonWithTitle:@"ItemC"];

[sheetshowFromRect:view.boundsinView:viewanimated:YES];

[sheetrelease];

}







运行下就发现问题很明显——取消按钮是在视图的顶部,而标准做法是显示在底部。怎么解决呢?如果在init函数中添加取消按钮就无法解决了。最后找到了一种将取消按钮也动态添加。

-(void)testActionSheetDynamic{

//创建时不指定按钮

UIActionSheet*sheet=[[UIActionSheetalloc]initWithTitle:@“DynamicUIActionSheet”delegate:self

cancelButtonTitle:nil

destructiveButtonTitle:nil

otherButtonTitles:nil];

//逐个添加按钮(比如可以是数组循环)

[sheetaddButtonWithTitle:@"ItemA"];

[sheetaddButtonWithTitle:@"ItemB"];

[sheetaddButtonWithTitle:@"ItemC"];

//同时添加一个取消按钮

[sheetaddButtonWithTitle:@"Cancel"];

//将取消按钮的index设置成我们刚添加的那个按钮,这样在delegate中就可以知道是那个按钮

sheet.cancelButtonIndex=sheet.numberOfButtons-1;

[sheetshowFromRect:view.boundsinView:viewanimated:YES];

[sheetrelease];

}





这样取消按钮就显示在底部并且行为也符合预期了。

对我来说现在剩下的最大一个疑问就是destructive按钮到底是什么(Apple文档也没有清晰地说明这点)?一些实验结果也表明它实际上和取消按钮并无区别,只不过它有一个红色背景而不是黑色的。所有如果在上例中改变destructiveButtonIndex而不是cancelButtonIndex,就可以看到标有“取消”的按钮有红色背景了。

三、出于完整性的考虑,和上述代码相匹配的delegate代码如下:

-(void)actionSheet:(UIActionSheet*)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex

{

if(buttonIndex==actionSheet.cancelButtonIndex)

{return;}

switch(buttonIndex)

{

case0:{

NSLog(@“ItemASelected”);

break;

}

case1:{

NSLog(@“ItemBSelected”);

break;

}

case2:{

NSLog(@“ItemCSelected”);

break;

}

}

}

原创文章,转载请注明:转载自DEVDIV博客

本文链接地址:iPhone开发之动态添加UIActionSheet按钮
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: