UIscrollview中的自定义UIButton

Posted

技术标签:

【中文标题】UIscrollview中的自定义UIButton【英文标题】:Custom UIButton in UIscrollview 【发布时间】:2013-03-21 05:37:19 【问题描述】:

我正在使用xcode 4.6 开发应用程序。在这里,我想以编程方式将 UIButton 添加到 UIscrollview。这是我遵循的代码。

UIButton *bt =[[UIButton alloc]initWithFrame:frame];
bt=[UIButton buttonWithType:UIButtonTypeCustom];
[bt setTitle:@"Custom Button" forState:UIControlStateNormal];
[bt addTarget:self action:@selector(userTappedOnLink:) forControlEvents:UIControlEventTouchUpInside];
bt.backgroundColor = [UIColor grayColor];
bt.titleLabel.textColor=[UIColor blueColor];
[self.mainscrollview addSubview:bt];
[self.mainscrollview bringSubviewToFront:bt];

现在的问题是 Button 在单击时消失了(从技术上讲,它的文本颜色变为白色)。我检查了保持 UIscrollview 颜色为红色,该按钮仍在视图中,但我无法了解其文本颜色更改的原因以及如何撤消 dis。 基本上我想使用 UIbutton 创建一个可点击的链接。 我知道 uitextview 方法(datadetectortype),但它没有用,因为我想在链接和实际链接的标签中显示不同的文本。

注意:文本颜色不会变回蓝色,仅保持白色。

提前致谢。

【问题讨论】:

【参考方案1】:

试试下面的代码

UIButton *bt =[UIButton buttonWithType:UIButtonTypeCustom];
bt.frame = CGRectMake(50.0, 50.0, 100.0, 50.0);
[bt setTitle:@"Custom Button" forState:UIControlStateNormal];
[bt addTarget:self action:@selector(userTappedOnLink:) forControlEvents:UIControlEventTouchUpInside];
bt.backgroundColor = [UIColor grayColor];
bt.titleLabel.textColor=[UIColor blueColor];
[self.scrollTest addSubview:bt];

-(void)userTappedOnLink:(UIButton*)sender

     NSLog(@"Test  ..");

    [self performSelector:@selector(changeBtnTextColor:) withObject:sender afterDelay:1.0];


-(void)changeBtnTextColor:(UIButton*)btn

  btn.titleLabel.textColor=[UIColor blueColor];

希望它对你有用。

【讨论】:

感谢您的回答..这是一个 gr8 帮助兄弟!现在一切正常。【参考方案2】:

使用下面的代码你会得到你的解决方案

UIButton *bt =[[UIButton alloc]initWithFrame:frame];
bt=[UIButton buttonWithType:UIButtonTypeCustom];
[bt setTitle:@"Custom Button" forState:UIControlStateNormal];
[bt addTarget:self action:@selector(userTappedOnLink:) forControlEvents:UIControlEventTouchUpInside];
[bt setBackgroundColor:[UIColor grayColor]];
[bt setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self.mainscrollview addSubview:bt];
[self.mainscrollview bringSubviewToFront:bt];

【讨论】:

好吧,只要我保持按钮正常而不是自定义,您的代码就可以正常工作。但是现在当我点击按钮时,事件被调用,但没有视觉感觉按钮被点击。 然后将标题的其他颜色设置为 UIControlStateHighlighted Like [bt setTitleColor:[UIColor redColor] UIControlStateHighlighted]; 在这种情况下,颜色始终保持蓝色。但是我再次更改了该按钮的调用函数中的颜色,并且在触摸按钮时产生了点击效果。 你想要第一次点击时标题变成红色直到你再次点击按钮。并在第二次点击标题变为蓝色。你想要那样吗? 没有没有。每当用户单击按钮时,我只是想要单击感觉..我已经找到了它的解决方案。所以我要做的是在按钮点击时调用的函数中写下这一行。 sender.titleLabel.textColor=[UIColor whiteColor];这里 sender 是被调用函数的参数。当然这一切都要记住,我正在写这一行 [button setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];初始化按钮时【参考方案3】:

使用下面的代码:

[bt setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

问题是您将 Title 设置为 titleLabel 并且您正在更改 buttonTitle 颜色的 textColor。

一切顺利!!!

【讨论】:

【参考方案4】:

检查 Button 的 Fram .. 是否有效? 并从您的代码中删除 bt=[UIButton buttonWithType:UIButtonTypeCustom]; 行。

【讨论】:

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

uiscrollview 和 uibutton 对触摸事件透明

UIScrollView 或 UICollectionView 中的自定义滚动行为

如何从 UITableViewCell 中的自定义 UIButton 中删除触摸延迟

如何为数组中的每个创建一个具有唯一图像和选择器的自定义 UIButton?

支持 UITableView 的自定义 UIScrollView

UIButton 没有响应嵌套在另一个 UIScrollView 中的 UIScrollView 中的触摸