【问题标题】:Subclassing a UIViewControllers View子类化 UIViewControllers 视图
【发布时间】:2011-10-04 19:26:42
【问题描述】:

例如,我的 uiviewcontroller 中有这个

- (void)loadView {
    CGRect frame = [[UIScreen mainScreen] applicationFrame];
    MyDetailView *detailView = [[MyDetailView alloc] initWithFrame:frame];
    self.view = detailView;
    [detailView release];
}

现在我在视图中添加一些标签,f.e.

@property(nonatomic, retain) UILabel *descriptionLabel;

如果我想在我的 ViewController 中设置它,我通常会做类似的事情

self.view.descriptionLabel.text = @"foo";

因为这会产生一个警告,所以我可以把它改成

[[(MyDetailView*)self.view descriptionLabel] setText:@"foo"];

有没有更好的方法呢? F.E. 告诉我的 ViewController 视图属性是子类?有没有办法解决这个问题,或者我应该将我的详细视图保存在一个额外的 ivar 中?

感谢您的提示!

【问题讨论】:

    标签: iphone objective-c ios uiview uiviewcontroller


    【解决方案1】:

    我不相信你所展示的有什么问题。我的写法可能略有不同,但这可能是一个偏好问题:

    myView = (MyDetailView *)[self view];
    [myView setDescriptionLabel:@"foo"];
    

    【讨论】:

    • 谢谢。认为有一个“更好”的方法。但如果没有,那很好。只是为了兴趣,为什么你更喜欢[self view]而不是self.view的代码风格(不知道这种风格怎么叫)?
    • 我考虑过同样的问题,实际上不是在使用自定义视图时而是使用 uitableview 或 uiscrollview 作为视图控制器的视图。我这样写的唯一原因,实际上只是偏好/清晰度问题,是我不喜欢将点访问器与括号/传统访问器混合使用——倾向于在给定的代码行中使用一个或另一个,发现它读起来容易一些。
    • 所以将滚动视图设置为视图也可以吗?
    • 确实可以使用滚动视图!
    【解决方案2】:

    按照您的编写方式,您似乎正在将 UILabel 设置为 NSString 值,所以这可能只是一个编辑。你试过了吗

    self.view.descriptionLabel.text = @"foo";
    

    【讨论】:

    • 当然,你是对的。这不是真正的代码,所以我忘记了属性。谢谢你,更新了我的代码。
    【解决方案3】:

    如果您想以编程方式进行操作,isaac 的回答非常棒。只需将您的自定义视图设置为它自己的变量,这样您就可以在文件中的任何位置绘制和传递信息。此答案只是添加到您的选项中的替代方法。如果您在 IB 中完成此操作,最简单的方法是选择视图控制器的 View 并将 Class 从默认的UIView 设置为您的自定义 MyDetailView。然后调用self.view 将直接访问自定义视图的属性。

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 2011-11-26
      • 2011-10-30
      • 2015-11-16
      • 2012-03-22
      相关资源
      最近更新 更多