【问题标题】:iOS - UISegmentedControl Strange BehaviouriOS - UISegmentedControl 奇怪的行为
【发布时间】:2014-07-02 09:48:49
【问题描述】:

我在应用程序中添加了一个 UISegmentedControl。段控制工作正常,我所做的只是在值没有改变时获取其选定状态。

UISegmentedControl 最初看起来像这样

-

在我显示“可达性不可用”状态后,它看起来像这样

-

但是在应用程序恢复并连接互联网并且应用程序退出活动后,它看起来像这样

UISegmentedControl 可以正常工作,但颜色无法恢复其状态。
- Reachibility 块位于 Application Delegates 中,与 UISegmentControl 无关

编辑

我还检查了即使在我以编程方式设置颜色之后 viewDidLoad 或 viewDidAppear 甚至在状态改变设置 UISegmentedControl 的 TintColor 它插入了一个 RGBA 值 给出颜色为 ( UIDeviceWhiteColorSpace 0.3 0.8 )

【问题讨论】:

    标签: ios ios7 uisegmentedcontrol


    【解决方案1】:

    我遇到了类似的问题。这对我有帮助 你可以试试看

    self.segControl.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
    

    这种行为就像段控件的刷新(我称之为)

    我把它放在-(void)viewWillAppear:(BOOL)animated 中。您可以将它放在相同的方法中,或者在网络调用和警报被解除后控件将返回的方法中。

    希望这会有所帮助。

    【讨论】:

    • 谢谢 :) 很高兴能提供一些帮助
    • 谢谢,这拯救了我的一天!
    • 不错的答案。谢谢。
    【解决方案2】:

    使用断点找到解决方案,然后检查 alpha 颜色在 Internet 连接之前和之后是否发生了变化。或者更好的是你设置类似这样的色调外观..

    #pragma mark - Appearance Methods
    
    -(void)customizeAppearance {
    UIColor *appTintColor = [UIColor colorWithRed:20/255.0f green:160/255.0f blue:160/255.0f 
    alpha:1.0f];
    [[UISearchBar appearance] setBarTintColor:appTintColor];
    [[UISegmentedControl appearance] setTintColor:appTintColor];
    
    self.window.tintColor = [UIColor colorWithRed:10/255.0f green:80/255.0f blue:80/255.0f 
    alpha:1.0f];
    }
    

    【讨论】:

    • 如果我从 Interface Builder 设置色调颜色,我该如何使用断点?
    • 最好按照上面提到的方法设置它,否则在 viewWillAppear 或 viewDidAppear 方法上设置 UISegmentControl 的色调颜色。
    • 在某些情况下,即使应用程序不在后台,颜色也会逐渐消失。任何方式都可以在可达性块中全局设置外观?
    • 我也在我的一个程序中使用这种类型。我已经像这样在 viewDidLoad 方法中设置了色调颜色。只需尝试添加此代码而不在界面生成器上设置颜色。 [segmentedControl setTintColor:[UIColor colorWithRed:35.0f/255 green:84.0f/255 blue:136.0f/255 alpha:1]];
    • 我还检查过,即使我在 viewDidLoad 或 viewDidAppear 中以编程方式设置颜色,甚至在状态更改设置 UISegmentedControl 的 TintColor 后,它也设置了一个 RGBA 值,它给出的颜色为( UIDeviceWhiteColorSpace 0.3 0.8 )
    【解决方案3】:

    我的应用也遇到了同样的情况。

    我尝试了所有的外观方法,但似乎没有任何效果。相反,它只是在正确的位置显示警报视图。显示时的警报视图会导致操作系统将当前视图控制器中的所有项目的 tintcolor 设置为灰色。如果在 viewcontroller 启动时显示,则会在哪个 viewcontroller 上更改 tintcolor 发生冲突。我猜这是导致颜色变化的错误。

    我猜你会在 viewwillappear 中检查可达性,并且你会在 viewwillappear 方法中显示警报视图。取而代之的是一个 bool 值,并根据值设置为 YES 或 NO,然后通过检查 bool 值在 viewdidappear 上显示 internetconnection 的警报视图。

    这就是我的解决方法。

    【讨论】:

    • 我的应用程序委托中有可达性块,并且 AlertView 已添加到窗口中。当应用程序进入前台时未显示视图时,Alertview 将被关闭。因此无法设置正确的色调。
    【解决方案4】:

    尝试以编程方式为组件设置颜色,而不是在界面生成器上设置颜色。

    这样做将允许使用断点来准确检查可达性通知完成后发生的情况。

    你可以简单地在构造函数上调用它,例如:

    [UIColor colorWithRed:66.0f/255.0f green:79.0f/255.0f blue:91.0f/255.0f alpha:1.0f]
    [[UISegmentedControl appearance] setTintColor:appTintColor];
    

    【讨论】:

      【解决方案5】:

      也许您可以在可达性的通知接收器中以编程方式重新确认所有色彩设置?

      -(void)reachabilityChanged:(NSNotification*)note 
      {
       Reachability * reach = [note object];
        //set tints and colors either way (isReachable and !isReachable)
      }
      
      [[NSNotificationCenter defaultCenter] addObserver:self
                                               selector:@selector(reachabilityChanged:)
                                                   name:kReachabilityChangedNotification
                                                 object:nil];
      

      【讨论】:

        【解决方案6】:

        请记住,iOS 7 中的 UIView 有一个 tintAdjustmentMode 属性。

        在您的情况下,当屏幕变暗时,此属性可能已在您的 UISegmentedControl 上设置为 UIViewTintAdjustmentModeDimmed

        来自UIView的documentation

        如果视图的 tintAdjustmentMode 属性值为 UIViewTintAdjustmentModeDimmed,则 tintColor 属性值为 自动变暗。

        【讨论】:

          【解决方案7】:

          您必须设置高度和宽度应与segment control 的高度相同的分隔线图像,分为两个一半 您的情况是红色和蓝色

          使用以下代码:

          [segmentControllerObj setDividerImage:[UIImage imageNamed:@"left.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
          [segmentControllerObj setDividerImage:[UIImage imageNamed:@"right.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-02-13
            • 1970-01-01
            • 1970-01-01
            • 2017-05-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多