iOS 7,UIView 子视图为零

Posted

技术标签:

【中文标题】iOS 7,UIView 子视图为零【英文标题】:iOS 7, UIView subviews is nil 【发布时间】:2013-10-01 06:46:42 【问题描述】:

为什么在 ios 7 [UIView subviews] 中总是返回 nil ?

我正在使用这个code,但已经获得了一个nil

iOS 7 中的错误?

已编辑:

TWTweetComposeViewController* tweetSheet = [[TWTweetComposeViewController alloc]  init];
[tweetSheet setInitialText: twitter_descrp];
[tweetSheet addURL:[NSURL URLWithString: twitter_link]];

NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: twitter_img]];
UIImage* uiImage = [UIImage imageWithData:imageData];
[tweetSheet addImage:uiImage];

NSLog(@"subviews: %@", [tweetSheet.view firstSubviewOfClass:[UIButton class]] );

这里的 firstSubviewOfClass 来自iOS7 Subviews Hierarchy

在 NSLog 中返回这个:

subviews: (
)

【问题讨论】:

它没有。你是如何创造你的观点的?你能显示一些代码吗? 能否将您的代码添加到问题中?外部链接可能会失效。 @Fogmeister,问题已编辑 你怎么知道TWTweetComposeViewController上面有UIButtons?难道他们不使用UIButton?您在这里展示的只是它没有任何按钮。请改用[UIView class] 在 Apple 提供的视图控制器的视图层次结构中播放是一个非常糟糕的主意。他们可以并且确实在逐个版本的基础上进行更改。 【参考方案1】:

iOS 7 层次结构发生了很大变化。例如,Apple 用表格视图和表格视图单元格替换了许多 UIButtons。

您确定层次结构中确实有一个按钮吗?对于调试,您可以尝试调用

NSLog(@"%@", [tweetSheet.view recursiveDescription]); // (ignore the warning)

查看视图层次结构的样子。

然而,在 iOS 7 中,Apple 开始有意阻止对系统视图的访问(例如UIAlertView)。有时是因为安全,有时是因为自己的原因。这意味着您可能根本无法访问该按钮。

不应该访问该按钮。

【讨论】:

谢谢,这对 Apple 来说是正确的方式。还有,我如何通过其他方式实现 AutoPost 推特帖子? @CReaTuS 明确禁止在 twitter/fb/etc 上自动发帖。这就是苹果试图阻止所有人访问这些视图的原因。 recursiveDescription 返回一个 1 UIVIew,看来,这是一个 Tweet UIView

以上是关于iOS 7,UIView 子视图为零的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 和 UILabel 子视图属性为零

在 iOS 7 SDK 中关闭 UIAlertview 后 UIView 没有响应

旋转iOS后子视图控制器高度为零

动画以调整 UIView 的高度

ViewController 的子视图的 IBOutlets 在 Storyboard 的 viewDidLoad 中为零

iOS:UIView 阻止用户交互,但不是子视图