【问题标题】:Add segments from a UISegmentedControl to an NSArray将 UISegmentedControl 中的段添加到 NSArray
【发布时间】:2015-05-22 10:43:53
【问题描述】:

我正在尝试将 2 segments 添加到 array,然后循环遍历其子视图。这是我的代码:

NSArray *myArray = [[NSArray alloc] initWithObjects:[self.segment.subviews objectAtIndex:0],
                                   [self.dataSegmentedControl.subviews objectAtIndex:1], nil];


for (id innerView in myArray) // I tried "myArray.subviews" but it didn't let me do ".subviews"
{
    if ([innerView isKindOfClass:[UILabel class]]) {
        ...
    }
}

当我在if statement 中插入NSLog 时,我没有得到任何输出。我能做些什么来解决这个问题?:

【问题讨论】:

  • [self.segment.subviews objectAtIndex:0][self.dataSegmentedControl.subviews objectAtIndex:1] 的值是多少?也许UILabel 也不是? @杰西卡
  • 我认为他们的子视图是
  • 以下工作:for (UIView *v in [[[segment subviews] objectAtIndex:0] subviews]) 但我只需要在 2 个段上进行。
  • 你想完成什么?
  • 请记住,尝试深入了解标准控件的私有子视图结构只会在每次 iOS 更新和结构更改时导致错误和崩溃。如果控件没有通过提供的 API 提供您需要的自定义,那么正确的解决方案是编写或找到一个自定义控件来满足您的需要。

标签: ios objective-c nsarray uisegmentedcontrol for-in-loop


【解决方案1】:

您看到的只有两个可能的原因:

  1. 数组的所有元素都不是UILabel
  2. 数组中没有元素。这可能是因为[self.segment.subviews objectAtIndex:0] 返回 nil,这仅意味着 self.segment 为 nil。

尝试探索视图层次结构,然后再做任何假设。所以打印出段及其子视图以了解层次结构。

但是,如果您想更改某些段的字体大小而不更改其他段的字体大小,我建议您不要这样做并弄乱内部结构。如果它成功了,你应该预料到任何即将到来的系统更新都会出现问题。 我建议您搜索其他 3rd 方组件或构建自己的组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多