自定义UIView没有显示

时间:2015-05-21 04:12:49

标签: ios objective-c cocoa-touch uiview

我有非常简单的UIView创建框,但是UIView根本没有显示,这是我sharingButtons.m上的代码

-(void)createContainer{

winWidth = [UIScreen mainScreen].bounds.size.width;


buttonContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, winWidth, 20)];
buttonContainer.backgroundColor = [UIColor redColor];


[self.view addSubview:buttonContainer];

 }


-(void)createButton{
[self createContainer];
}

这是我的sharingButtons.h

 @interface SocialSharing : UIViewController {
int winWidth;
 }

- (void)createButton;
- (void)createContainer;

#pragma mark - Properties

@property(nonatomic, strong) UIView* buttonContainer;

@end

createButton

上从MyViewControler.m调用viewDidLoad方法

我的代码有问题吗?

EDITED

这是MyViewControler.m上的代码

- (void)loadSocialSharingButton {

socialButtons = [[SocialSharing alloc] init];

[socialButtons createButton];
}

- (void)viewDidLoad {

[super viewDidLoad];

[self loadSocialSharingButton];

}

对不起,我只是了解对象:)

非常感谢

4 个答案:

答案 0 :(得分:3)

您的buttonContainer不可见的原因是,它未加载到您的视图层次结构中。

要使其可见,您应将其添加为子视图。在MyViewController.m viewDidLoad[self loadSocialSharingButton];

之后添加以下行
[self.view addSubview:socialButtons.buttonContainer];

希望这有帮助!

答案 1 :(得分:1)

您的SocialSharing UIViewController 的子类。

您将buttonContainer view添加到此SocialSharing Controller,如果您只是致电

,则此控制器不在屏幕上
socialButtons = [[SocialSharing alloc] init];

[socialButtons createButton];

所以,你看不到任何东西。

答案 2 :(得分:1)

您目前是@ MyViewController但是您正在加载自定义视图@ SocialSharing ViewController,两个ViewController都是截然不同的,您不能通过初始化将社交共享中的自定义视图提供给MyViewController。

您已将SocialSharing类更改为UIView的子类并初始化此视图并添加到MyViewController的子视图中。

SocialSharing.h

@interface SocialSharing : UIView {
int winWidth;
}
- (instancetype)createButton;
#pragma mark - Properties
@property(nonatomic, strong) UIView* buttonContainer;
@end

SocialSharing.m

- (instancetype)createButton
{
   winWidth = [UIScreen mainScreen].bounds.size.width;
   self = [super initWithFrame:CGRectMake(0, 0, winWidth, 20)];
   if (self) {
     buttonContainer = [[UIView alloc] initWithFrame:];
     buttonContainer.backgroundColor = [UIColor redColor];
     [self addSubview:buttonContainer];
   }
   return self;
}

MyViewController.m

- (void)viewDidLoad {
  [super viewDidLoad];
  [self loadSocialSharingButton];
  }
- (void)loadSocialSharingButton {
  socialButtons = [SocialSharing alloc] createButton];
  [self.view addSubView:socialButtons];
  }

答案 3 :(得分:1)

在iOS应用中,一次只有一个ViewController处于活动状态。当你在MyViewController时,MyViewController处于活动状态,如果你想要导航到任何其他视图控制器而不是你需要呈现或推送它的实例。这样做会使另一个视图控制器处于活动状态。

在您的情况下,问题是SocialSharingUIViewController的子类,因为它创建为SocialSharing : UIViewController并且它不活动,因此在其上添加任何视图都不会显示因为SocialSharing的实例不是pushed/ presented。如果您需要显示来自SocialSharing的视图,则可以将其从UIView子类化,或者推送/显示SocialSharing的实例,以使其视图处于活动状态且可见。