自定义 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.m
在viewDidLoad
上调用的
我的代码有什么问题吗??
已编辑
这是我在 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.m
中viewDidLoad
在[self loadSocialSharingButton];
之后添加以下行
[self.view addSubview:socialButtons.buttonContainer];
希望对您有所帮助!
【讨论】:
哇,我真是太傻了,我应该知道它,而且效果很好,非常感谢 :)【参考方案2】:您的 SocialSharing
是 UIViewController 的子类。
然后你将你的buttonContainer view
添加到这个SocialSharing Controller
,如果你只是打电话,这个控制器就不会出现在屏幕上
socialButtons = [[SocialSharing alloc] init];
[socialButtons createButton];
所以,你什么都看不到。
【讨论】:
【参考方案3】:在 ios 应用程序中,一次只有一个 ViewController
处于活动状态。就像你在MyViewController
一样,所以MyViewController
处于活动状态,如果你想导航到任何其他视图控制器而不是你需要呈现或推送相同的实例。这样做会使另一个视图控制器处于活动状态。
在您的情况下,问题是您的 SocialSharing
是 UIViewController
的子类,因为它被创建为 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 的?
当 UITableView 枯竭时需要帮助显示自定义 UIView