【问题标题】:Initialize custom UIView before drawRect gets called在调用 drawRect 之前初始化自定义 UIView
【发布时间】:2014-03-05 20:55:58
【问题描述】:

我需要通过调用它的drawRect方法来自定义一个UIView,所以我继承了UIView并将它命名为MyView。绘图将取决于一些变量(本例中为 myString),因此我需要在 drawRect 开始之前初始化变量。我的 MyView.h 看起来像

@interface MyView : UIView
@property (strong, nonatomic) NSString *myString;
@end

在 viewController.m 中,如果我执行以下操作

MyView *myView = [MyView alloc] initWithFrame:someRect];
[myView setMyString:@"string value"];

[self.view addSubview:myView];

一切都按预期工作,myString 是在调用 drawRect 之前设置的。

我要解决的问题是,如果我想通过使用 Interface Builder 将 MyView 添加到视图控制器(将 UIView 拖放到视图控制器的视图并将其类更改为 MyView),那么重点在哪里我可以在调用 drawRect 之前设置 myString 吗?

【问题讨论】:

  • 在设置变量之前是否调用drawrect并不重要。您可以在设置变量后调用[view setNeedsDisplay],它会相应地重绘。如果这是在viewDidLoad 之类的方式中完成的,那么用户将永远不会看到不正确绘制的视图,但会在重新绘制正确的方式后看到它。
  • Armand DOHM 的回答对我有用,谢谢。
  • 你注意到我的评论是在他回答之前几分钟吗?很高兴您解决了问题。

标签: ios uiview


【解决方案1】:

在你的视图控制器中设置它

-(void) viewDidLoad {
    MyView *myView = self.view;
   [myView setMyString:@"string value"];
 ]

【讨论】:

  • 我认为这条线 MyView *myView = self.view; 不适用于我的场景,因为我将 MyView 放在视图控制器的视图之上(在 Interface Builder 中)。但是我确实尝试了[self.myView setMyString:@"string value"];,drawRect 在设置值之前仍然先运行。
  • 更新:是的,它有效。我之前把 NSLog 放错了地方。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多