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?