我在搜索視圖控制器中調用以下方法創建一個UIActionSheet
包含兩個UISegmentedControl
s(用於選擇搜索設置)中的一個按鈕。當用戶選擇第一個分段控件上的某個按鈕時,我想禁用(setEnabled:NO
)第二個分段控件。問題是它不重繪(所以它永遠不會被禁用)。如果我在創建UIActionSheet時最初設置了Enable:NO,它最初是正確禁用的。UIActionSheet中的子視圖不會重繪時setEnabled調用
我試着通過調用[UIView setNeedsDisplay]
強制對第二個分段控件和動作頁進行重繪,但那不起作用。
也嘗試removeFromSuperview在第二個分段控制。
這是不可能與內置的UIActionSheet?或者有更好的方式讓我顯示搜索設置?這是爲iOS5編碼的iPhone應用程序。 Popovers不適用於iPhone。我能想到的另一種方式是將設置顯示在自己的視圖中,但我想避免這種情況。
-(void)onSettingsButtonClick:(id)sender
{
// display segmented button views on actionSheet
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Search Settings" delegate:self cancelButtonTitle:@"Close" destructiveButtonTitle:nil otherButtonTitles:nil, nil];
sheet.actionSheetStyle = UIActionSheetStyleDefault;
UISegmentedControl * segFullTextOrTags = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Tags", @"Full Text", @"Users", nil]];
[segFullTextOrTags addTarget:self action:@selector(onSegFullTextOrTagsClicked:) forControlEvents:UIControlEventValueChanged];
[segFullTextOrTags setSegmentedControlStyle:UISegmentedControlStyleBar];
[segFullTextOrTags setTag:100];
UISegmentedControl * segType2 = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"All Actions", @"Discussions", @"Responses", @"Comments", nil]];
[segType2 addTarget:self action:@selector(onSegType2Clicked:) forControlEvents:UIControlEventValueChanged];
[segType2 setSegmentedControlStyle:UISegmentedControlStyleBar];
[segType2 setTag:101];
[sheet showFromTabBar:self.tabBarController.tabBar];
// code that expands the action sheet height and adjusts the view positions is omitted here
// add the additional views to the actionSheet
[sheet addSubview:segFullTextOrTags];
[sheet addSubview:segType2];
}
-(void)onSegFullTextOrTagsClicked:(id)sender
{
[self updateSettingsUI:(UIActionSheet*)sender];
}
-(void)onSegType2Clicked:(id)sender
{
[self updateSettingsUI:(UIActionSheet*)sender];
}
-(void)updateSettingsUI:(UIActionSheet*)actionSheet
{
UISegmentedControl * segFullTextOrTags = (UISegmentedControl*)[actionSheet viewWithTag:100];
UISegmentedControl * segType2 = (UISegmentedControl*)[actionSheet viewWithTag:101];
if (segFullTextOrTags.selectedSegmentIndex == 2) // users
{
// disable 2nd segmented button control
[segType2 setEnabled:NO];
}
else
{
// enable 2nd segmented button control
[segType2 setEnabled:YES];
}
// doesn't work...
[segType2 setNeedsDisplay];
[actionSheet setNeedsDisplay];
}
對象不同!我簡單地通過將UISegmentedControls存儲在成員var指針中,並使用它們而不是viewWithTag來實現它。 viewWithTag:101必須返回一個新的實例。奇怪,因爲viewWithTag:100似乎工作...(segFullTextOrTags.selectedSegmentIndex == 2)在updateSettingsUI中的計算結果爲true。不管怎樣,謝謝!我還會考慮使用模態視圖控制器子類。 –