【问题标题】:UISegmentedControl fires ValueChanged when loading selectedindexUISegmentedControl 在加载 selectedindex 时触发 ValueChanged
【发布时间】:2012-01-03 16:22:53
【问题描述】:

我有一个 UISplitViewController 实用程序类型应用程序,其中每个 UIViewController 处理各种计算。我有一个带有分段控件的弹出框,允许用户设置某些选项。我遇到的问题是在保存和重新加载UITextfields 的内容和选定的段索引时,如果段控制索引已保存并且== 1,则从viewdidload 触发 valuechanged 事件,因为状态是从

   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   theDepthSegment.selectedSegmentIndex = [[defaults objectForKey:@"updateMe"] intValue];

有没有办法防止 valuechanged 被触发,因为 selectedsegment 在视图中设置了加载?或者也许以某种方式确定触摸事件与代码之间的区别

这似乎很奇怪,也许还有其他方法......

谢谢

【问题讨论】:

    标签: iphone objective-c ipad uisegmentedcontrol


    【解决方案1】:

    考虑到视图只是在加载,分段控件没有先前的值,所以它会假设它确实正在被更改并相应地采取行动。您可能解决此问题的一种方法是在链接到分段控件的IBAction 方法中设置BOOL 值。在viewDidLoad 方法的开头,说wasLoaded = NO(其中wasLoaded 需要在你的头文件中声明)。然后您将分配您的selectedSegmentIndex。然后,声明wasLoaded = YES。最后,在您的 IBAction 方法中,说类似

    if (wasLoaded) { 
        // do what you need to do since this isn't when it's being initialized 
    }
    

    【讨论】:

      【解决方案2】:

      完成此操作的最快方法是在界面构建器中分离IBAction,并在更改viewDidLoad 中的值后添加addTarget:action:forControlEvents: 方法。对于UIControlEventValueChanged,无法区分触摸触发更改和编程更改。你可以看一下触控事件,但它和值改变的不一样。

      【讨论】:

        【解决方案3】:

        迪帕克是对的。如果你没有使用 Interface Builder 来设置你的UISegmentedControl,你应该首先设置UISegmentedControl 的选定索引,然后调用addTarget:action:forControlEvents:。像这样:

                    NSArray *items = [[NSArray alloc] initWithObjects:@"A", @"B", nil];
                    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:items];
                    [items release];
                    [segmentedControl setFrame:CGRectMake(10, 10, 300, 46.0f)];
                    [segmentedControl setTag:60];
                    [segmentedControl setSelectedSegmentIndex:savedSelectedIndex];
                    [segmentedControl addTarget:self action:@selector(segControlClicked:) forControlEvents:UIControlEventValueChanged];
                    [self.view addSubview:segmentedControl];
                    [segmentedControl release]; 
        

        【讨论】:

          猜你喜欢
          • 2011-06-02
          • 1970-01-01
          • 2012-04-30
          • 1970-01-01
          • 1970-01-01
          • 2011-10-13
          • 1970-01-01
          • 1970-01-01
          • 2011-12-08
          相关资源
          最近更新 更多