使用实例方法以编程方式添加子视图

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。把你的例子弄清楚,然后我们可以继续。你也没有说什么不起作用。是否抱怨您的方法名称错误(它们是错误的)。是默默地失败了吗?是不是找不到方法? createViewcreateApp ? 除了调用错误的方法之外,您并没有将子视图添加到预期对象的视图中。与其在 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 方法。

以上是关于使用实例方法以编程方式添加子视图的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式实例化自定义视图控制器并通过标签获取子视图

以编程方式创建视图和添加子视图比使用情节提要更好/更快[重复]

什么方法以编程方式将子视图添加到 NIB

必须使用延迟实例化的UI视图将子视图添加到视图控制器两次

以编程方式获取视图控制器的实例

在以编程方式创建的 UIView 层次结构之上添加子视图