使用实例方法以编程方式添加子视图
Posted
技术标签:
【中文标题】使用实例方法以编程方式添加子视图【英文标题】:Add subview programmatically using instance method 【发布时间】:2015-02-10 11:04:42 【问题描述】:我正在尝试使用ThirdClass : NSObject
类中声明的方法以编程方式将子视图添加到我的ViewController : UIViewController
。这是我的代码:
在 ViewController.m 文件中我这样做:
- (void)viewDidLoad
[super viewDidLoad];
ThirdClass *instanceOfThirdClass = [[ThirdClass alloc] init];
[instanceOfThirdClass createView];
在我的 ThirdClass.m 中我声明了实例方法:
-(void)createView
NSLog(@"enter create app");
UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(50, 0, 320, 100)];
[myView setBackgroundColor:[UIColor redColor]];
ViewController *instanceOfViewController = [[ViewController alloc]init];
[instanceOfViewController.view addSubview:myView];
所以问题显然是我试图将创建的视图添加到类实例中,正确的方法是下面@gary-riches 发布的方法,
【问题讨论】:
您正在调用 [instanceOfThirdClass createView];但方法名称是 createApp。把你的例子弄清楚,然后我们可以继续。你也没有说什么不起作用。是否抱怨您的方法名称错误(它们是错误的)。是默默地失败了吗?是不是找不到方法?createView
与 createApp
?
除了调用错误的方法之外,您并没有将子视图添加到预期对象的视图中。与其在 ThirdClass.m 中创建 ViewController 的对象,然后向其添加子视图,不如将 myView 返回给接收者,然后添加子视图。
对不起,这不是我正在使用的实际代码,我已经尽可能地更改和消除以简化问题
我看到你已经编辑了这个问题。您正在将您创建的视图附加到一个新的实例化视图控制器,但您正在显示的视图是属于 ViewController.m 的视图。您需要将视图添加到 ViewController.m 的视图中。
【参考方案1】:
您正在将您创建的视图附加到一个新的实例化视图控制器,但您正在显示的视图是属于 ViewController.m 的视图。您需要将视图添加到 ViewController.m 的视图中。
更新您的 createView 方法以处理视图:
-(void)createViewInView:(UIView *)aView
NSLog(@"enter create app");
UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(50, 0, 320, 100)];
[myView setBackgroundColor:[UIColor redColor]];
[aView addSubview:myView];
然后将您的呼叫更改为:
[instanceOfThirdClass createViewInView:self.view];
另外,请确保您在 ThirdClass.h 的标头中有方法签名。应该是:
-(void)createViewInView:(UIView *)aView;
【讨论】:
我在 .h 文件中有一个方法签名,但显然这不是将视图添加到类实例的正确方法 好答案(已投票)。 Laur,如果您需要帮助使 Gary 的解决方案发挥作用,您将需要发布标题的相关部分(来自 ThirdClass.h)和新的createViewInView
方法。以上是关于使用实例方法以编程方式添加子视图的主要内容,如果未能解决你的问题,请参考以下文章