ios - 以编程方式编码的UIButton未在我的视图中显示

时间:2012-05-25 00:47:43

标签: ios uibutton viewdidload

您好,

我正在尝试以编程方式将UIButton和其他项添加到我的UIViewController中,并且从我在其他SO问题中阅读和看到的内容我应该使用此代码在正确的轨道上:

- (void)viewDidLoad
{
[super viewDidLoad];



UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];    
backButton = [[UIButton alloc] init];
backButton = [UIButton buttonWithType:UIButtonTypeCustom];
backButton.frame = CGRectMake(10, 25, 150, 75);
backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15];
backButton.titleLabel.text = @"Back"; 
[self.view addSubview:backButton];


// Do any additional setup after loading the view.
}

现在代码被放置在viewDidLoad方法中并且没有出现,这引出了我的问题 - 我做错了什么?

当我想要更改背景颜色并放入viewDidLoad时,它可以正常工作。

干杯杰夫

7 个答案:

答案 0 :(得分:25)

我认为您可能正确插入按钮,但却看不到它,因为它没有背景且文字没有显示。

尝试使用圆角矩形按钮系统按钮,看看是否会显示它。正确设置文本。我还将删除设置字体,只是因为字体有问题。

// backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
backButton = [UIButton buttonWithType:UIButtonTypeSystem];
backButton.frame = CGRectMake(10, 25, 150, 75);
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[self.view addSubview:backButton];

更新:UIButtonTypeRoundedRect已被弃用。

答案 1 :(得分:4)

您正在错误地设置按钮标题。使用:

- (void)setTitle:(NSString *)title forState:(UIControlState)state

正如其他人所说,你不需要三次初始化你的按钮。删除第2行和第3行。

答案 2 :(得分:4)

您已使用静态方法buttonWithType创建了按钮,再次为该按钮分配了内存。

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
backButton.frame = CGRectMake(10, 25, 150, 75);
backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15];
backButton.titleLabel.text = @"Back";
[self.view addSubview:backButton];

答案 3 :(得分:1)

您可以稍后使用dispatch_after来调用块。所以这里第一个视图加载它将花费0.1秒,然后所有按钮在视图中可见。 Xcode,开始键入dispatch_after并按Enter键自动完成以下内容:

试试这个:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

  UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];    
  backButton = [[UIButton alloc] init];
  backButton = [UIButton buttonWithType:UIButtonTypeCustom];
  backButton.frame = CGRectMake(10, 25, 150, 75);
  backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15];
  backButton.titleLabel.text = @"Back"; 
  [self.view addSubview:backButton];

 });

答案 4 :(得分:0)

除了评论中指出的问题

UIButtonTypeCustom,创建一个空白按钮。

如果要将图像用作按钮,请使用此选项,但请记住使用setImage:覆盖按钮的标题。所以你需要设置一个BackgroundImage。

你的按钮实际上就在那里“不会”出现在那里

所以

使用UIButtonTypeRoundRect(可能略有不同)

或者如果您想将图像作为按钮。

使用UIButtonTypeCustom 致电setBackgroundImage:,然后致电setTitle:forState:

答案 5 :(得分:0)

你必须使用按钮类型是RoundedRect然后我们可以看到背景颜色

[UIButton buttonWithType: UIButtonTypeRoundedRect]; 

希望它会有所帮助!

答案 6 :(得分:0)

对我来说,问题是 UIButton's 文本和背景的默认颜色与我的应用程序的背景颜色的组合使它看起来好像按钮不存在时一样;只是很难看到。将文本颜色设置为与应用背景形成对比的颜色解决了该问题。