Ios 子类化UIView/UIViewController

Ios 子类化UIView/UIViewController,ios,objective-c,uiview,uiviewcontroller,uibutton,Ios,Objective C,Uiview,Uiviewcontroller,Uibutton,我的应用程序中需要很多自定义按钮。目前,我正在使用故事板在我需要的每个控制器上定义这些按钮。然而,我觉得因为我在整个应用程序中都需要它们,所以我最好不要使用另一个视图控制器/视图,它是UIView或UIViewController的子类,因此如果我需要做任何更改,我只需要做一次,而不是在不同的视图控制器中。最好的方法是什么?另外,你能告诉我如何以编程方式创建按钮吗?这就是我现在正在做的,我得到了一个完全空白的屏幕 -(void)viewDidAppear:(BOOL)animated {

我的应用程序中需要很多自定义按钮。目前,我正在使用故事板在我需要的每个控制器上定义这些按钮。然而,我觉得因为我在整个应用程序中都需要它们,所以我最好不要使用另一个视图控制器/视图,它是
UIView
UIViewController
的子类,因此如果我需要做任何更改,我只需要做一次,而不是在不同的视图控制器中。最好的方法是什么?另外,你能告诉我如何以编程方式创建按钮吗?这就是我现在正在做的,我得到了一个完全空白的屏幕

-(void)viewDidAppear:(BOOL)animated 
{ 
    UIButton *testButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [testButton setFrame:CGRectMake(0, 390, 100, 40)];
    [testButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
    [setImage:[UIImage imageNamed:@"test_button"] forState:UIControlStateNormal];
    [setImage:[UIImage imageNamed:@"test_button"] forState:UIControlStateHighlighted];  
    [setEnabled:YES];
    [self.view addSubview:testButton];
 }

您的按钮有可能远离可见矩形。对于以编程方式添加按钮,您基本上是正确的。此外,图像应具有文件扩展名。因为您正在添加一个customButton,如果没有图像,那么您将看不到任何按钮。尝试为按钮添加标题,即使没有添加图像,也会显示标题

请尝试下面的代码

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; //you must have a good reason to not add this line.
    UIButton *testButton=[UIButton buttonWithType:UIButtonTypeCustom];
    [testButton setFrame:CGRectMake(0, 20, 100, 40)];
    [testButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
    [testButton setImage:[UIImage imageNamed:@"test_button.png"] forState:UIControlStateNormal];
    [testButton setImage:[UIImage imageNamed:@"test_button.png"] forState:UIControlStateHighlighted]; 
    [testButton setEnabled:YES];
    [self.view addSubview:testButton];
 }

您的setImage和setEnabled行是按钮行还是视图控制器行?另外,您是否遗漏了[超级视图显示:动画];故意的?那代码甚至都不会编译。你需要让testButton在setImage前面并启用setImage,然后它应该可以工作(假设你真的创建了那些图像——如果没有,按钮将不可见)。Np,superview确实出现了:动画就在那里,我只是忘了粘贴它。setImage和setEnabled用于按钮。前面的setImage和setEnabled中的测试按钮是什么意思?我不确定你说的图像创建是指什么,我把这些图像作为支持文件。谢谢,这很有效。既然我有了这个,我应该在主控制器文件中做些什么才能以某种方式继承/展示这个行为,因为我希望这个按钮跨多个控制器。我猜您希望有同一个viewController的多个实例或从该控制器继承的viewController实例。在任何一种情况下,在每个派生的/sub/child类的viewdide中(如果您正在实现它),只需调用[super viewdide:animated];将添加该类的testButton。嗯,但是如何在该控制器和其他控制器之间创建关系呢。比如当我写SuperViewDidExample的时候,它怎么知道我指的是这个特殊的控制器呢?所以,我现在基本上有一个视图控制器,在屏幕底部有三个按钮。我需要这些按钮在我的应用程序的多个屏幕上。那么,我应该在现有的其他控制器(如mapview控制器、表视图控制器等)中做些什么,以便它们可以通过按钮继承此视图控制器,从而显示按钮?下面是一个继承示例,可能会有所帮助