自定义 UIView 不显示

Posted

技术标签:

【中文标题】自定义 UIView 不显示【英文标题】:Custom UIView doesnt show 【发布时间】:2015-05-21 04:12:48 【问题描述】:

我有一个非常简单的 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.mviewDidLoad 上调用的

我的代码有什么问题吗??

已编辑

这是我在 MyViewControler.m 上的代码

- (void)loadSocialSharingButton 

socialButtons = [[SocialSharing alloc] init];

[socialButtons createButton];


- (void)viewDidLoad 

[super viewDidLoad];

[self loadSocialSharingButton];


对不起,我刚刚了解了 obj c :)

非常感谢

【问题讨论】:

你能显示来自 MyViewController.c 的代码吗,你调用 createButton 的地方? 嗨@VivekMolkar 请检查我的更新:) 也许你的按钮隐藏在导航栏下(在顶部)。如果你让它高 200 像素而不是 20 像素,你看到了吗? 【参考方案1】:

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

要使其可见,您应该将其添加为子视图。在MyViewController.mviewDidLoad[self loadSocialSharingButton]; 之后添加以下行

[self.view addSubview:socialButtons.buttonContainer];

希望对您有所帮助!

【讨论】:

哇,我真是太傻了,我应该知道它,而且效果很好,非常感谢 :)【参考方案2】:

您的 SocialSharingUIViewController 的子类。

然后你将你的buttonContainer view 添加到这个SocialSharing Controller,如果你只是打电话,这个控制器就不会出现在屏幕上

socialButtons = [[SocialSharing alloc] init];

[socialButtons createButton];

所以,你什么都看不到。

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

您当前是@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

社交分享.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];
  

【讨论】:

以上是关于自定义 UIView 不显示的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个自定义 UIView 代码不显示 UILabel 的?

故事板中的自定义 UIView 不显示子视图

当 UITableView 枯竭时需要帮助显示自定义 UIView

为啥从自定义 UIView 向 UIButton 添加子视图不显示添加的子视图?

UILabel 在圆形自定义 UIView 中不可见

自定义 UIView 标签和动画未显示在视图控制器中