gpt4 book ai didi

ios - 调用 setEnabled 时,UIActionSheet 中的 subview 不会重绘

转载 作者:行者123 更新时间:2023-11-29 04:35:40 24 4
gpt4 key购买 nike

我在搜索 View Controller 中有一个按钮,它调用以下方法创建一个包含两个 UISegmentedControl (用于选择搜索设置)的 UIActionSheet 。当用户选择第一个分段控件上的某个按钮时,我想禁用(setEnabled:NO)第二个分段控件。问题是它不会重绘(因此它永远不会被禁用)。如果我在创建 UIActionSheet 时最初 setEnabled:NO,则它最初会被正确禁用。

我尝试通过调用 [UIView setNeedsDisplay] 来强制重绘第二个分段控件和操作表,但这不起作用。

还在第二个分段控件上尝试了removeFromSuperview。

内置的 UIActionSheet 不可能做到这一点吗?或者有更好的方法让我显示搜索设置吗?这是一个为 iOS5 编码的 iPhone 应用程序。弹出窗口不适用于 iPhone。我能想到的另一种方法是让设置显示在它自己的 View 中,但我想避免这种情况。

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

最佳答案

我认为 UIActionSheet 不是向用户呈现设置 View 的正确控件。

来自类引用文档:

Use the UIActionSheet class to present the user with a set of alternatives for how to proceed with a given task. You can also use action sheets to prompt the user to confirm a potentially dangerous action. The action sheet contains an optional title and one or more buttons, each of which corresponds to an action to take.

相反,您应该创建一个 UIViewController 子类并以模态方式或使用导航 Controller 呈现它。

我不知道为什么 setEnabled 在您的代码中不起作用。 setNeedsDisplay 不是必需的,控件应该自行重绘。检查updateSettingsUI中的segType2和onSettingsButtonClick中的segType2是否是同一个对象。

关于ios - 调用 setEnabled 时,UIActionSheet 中的 subview 不会重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11091361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com