IOS以编程方式从另一个类添加子视图

时间:2013-11-26 06:52:59

标签: ios objective-c addsubview

我试图创建一个自定义视图,它像底栏一样工作

现在这个函数在多个类上都是必需的,所以我尝试将它写入一个新类并导入它喜欢:

//BottomBarLauncher.h
#import <UIKit/UIKit.h>

@interface bottomBarLauncher : UIViewController
-(void)launchBottomBar;
@end

并将其实施为:

//BottomBarLauncher.m
-(void) launchBottomBar{
    for (UIView *subView in [topView subviews]) {
        [subView removeFromSuperview];
    }
    UIView *btnBarView = [[UIView alloc]initWithFrame:CGRectMake(0,     self.view.frame.size.height - 53.3, 320, 53.3)];
    btnBarView.backgroundColor = [UIColor redColor];
    [self.view addSubview:btnBarView];
}

现在问题出现了,我尝试在新视图上实现它,如下所示:

//NewView.m
#import "BottomBarProtocol.h"

@interface NewView()
{
    BottomBarLauncher *btnBar;
}
@end
//blahblahblah

[btnBar launchBottomBar];

没有任何反应,我认为问题出在

[self.view addSubview:btnBarView];

但我不知道如何选择当前视图作为目标,我可以将子视图添加到。

3 个答案:

答案 0 :(得分:0)

您可以返回UIView表单launchBottomBar方法,并在当前subView类中添加ViewController

答案 1 :(得分:0)

创建自定义类并委托并在窗口中添加该视图并设置其框架以使其不可见并设置其框架并在需要时从底部滑动,以便您可以在所有视图控制器中使用它。
感谢。

答案 2 :(得分:0)

首先提出建议,查看您的要求/代码我认为您要创建自定义视图。要创建自定义视图,请创建一个继承自UIView的类,而不是创建UIViewController

现在转到代码,您的btnBar是一个UIViewController,它有自己的视图self.view所以当您在内部调用此[btnBar launchBottomBar]时,您正在添加底部栏self.view控制器视图btnBar,而不是NewView控制器view。希望你能理解我指出的内容。

这里缺少几个电话,

btnBar.view.frame = CGRectMake(0,self.view.bounds.size.height-40,self.view.bounds.size.width,40); // Add suitable frame.

//This call will add the btnBar's view as subview onto your current view controller's view.
[self.view addSubView:btnBar.view];

这不是正确/推荐的方式,您可能面临内存泄漏的严峻挑战。为避免这些错误,我建议改为创建自定义UIView。看看如何创建自定义视图。

希望有所帮助!