2011-08-24 99 views
2

我正在创建弹出对话框(UIAlertView)。它的效果很好,除了我需要从19个项目中选择,并且按钮不会自动滚动,只有五个适合屏幕。带19个按钮的UIAlertView

那么,我可以让他们滚动吗?如果没有,我可以将UIPickerView置于警报视图中吗?或者,还有更好的方法?

到目前为止的代码:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Provider" 
               message:@"Please choose your provider:" 
               delegate:self 
             cancelButtonTitle:nil 
             otherButtonTitles:@"AT&T",@"Verizon",@"Sprint",@"Nextel",@"T-Mobile",@"Alltel",@"US Cellular",@"Virgin Mobile",@"Metro PCS",@"Boost Mobile",@"Cricket",@"Rogers(Can)",@"Telus(Can)",@"Bell Mobility(Can)",@"Fido",@"Virgin(Can)",@"O2",@"Vodaphone",@"Meteor", nil]; 
[alert show]; 
[alert release]; 
+4

这是一个可用性*噩梦*。 19个按钮?!你是不是疯了?? –

回答

2

你可能会考虑使用UIActionSheet代替。当你有很多物品时它会自动滚动。

+2

当然,它会滚动,但它仍然是这样的东西错误的UI元素。他没有执行任何操作,他希望用户选择一些东西。因此,他应该使用更适合挑选的控件,如“UIPickerView”或“UITableView”。 –

+0

好吧,那么我该如何将一个UIpickerView放入一个alertview中或者弹出某种类型或者以相同方式工作呢?我无法在苹果文档中看到它像弹出窗口一样工作。 – Rick

+0

不,它不会以这种方式工作,它会从屏幕底部滑动。如果你不希望你应该选择另一种选择。 – jtbandes

2

不要创建19个按钮。相反,请使用UIPickerView

+0

选取器...对不起,这是我的意思是微调。但是你可以把它放在UIAlertview中吗? – Rick

+1

@Sabanim警报视图用于警报。从列表中选择一个项目不是一个警报。那么在视图控制器中以模态方式呈现它呢? –

1

通常,使用UIActionSheet或某种模态视图。

在这种特殊情况下,您可以使用CoreTelephony framework。 CTCarrier有一个属性carrierName,应该返回类似于你所要求的东西(只要设备连接到蜂窝网络)。

+0

是的。我相信这会返回当前连接的网络。所以如果你有verizon但是连接到alltel塔,它会返回alltel而不是verizon,verizon是我需要的。这是第一个解决方案的选择,但它不适用于这种情况。谢谢 – Rick

+0

@Sabanim:请参阅链接文档:“如果用户正在漫游,则价值不会改变;它始终代表用户拥有账户的提供商”。 'carrierName'的主要缺点是,如果设备处于飞行模式或没有服务,它将返回nil。 – Anomie