我看过很多关于类似事情的帖子,但没有一个匹配或解决这个问题.从iOS 7开始,每当我添加UIButton到一个UITableViewCell或甚至是一个footerview它都工作"很好",这意味着它接收目标动作,但它没有显示通常在点击时发生的小亮点UIButton.它使UI看起来很时髦而不显示按钮对触摸的反应.
我很确定这是iOS7中的一个错误,但是有人找到了解决方案或者可以帮我找到一个:)
编辑:我忘了提到它会突出显示我是否长按按钮,但如果只是添加到标准视图就不会像它那样快速点击.
码:
创建按钮:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.titleLabel.font = [UIFont systemFontOfSize:14];
button.titleLabel.textColor = [UIColor blueColor];
[button setTitle:@"Testing" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents: UIControlEventTouchDown];
button.frame = CGRectMake(0, 0, self.view.frame.size.width/2, 40);
Run Code Online (Sandbox Code Playgroud)
我测试的东西:
//删除手势识别器UITableView,以防他们挡路.
for (UIGestureRecognizer *recognizer in self.tableView.gestureRecognizers) {
recognizer.enabled = NO;
}
Run Code Online (Sandbox Code Playgroud)
//从Cell中删除手势
for (UIGestureRecognizer *recognizer in self.contentView.gestureRecognizers) {
recognizer.enabled = NO;
}
Run Code Online (Sandbox Code Playgroud)
//这显示了轻微的触摸,但这不是理想的外观
button.showsTouchWhenHighlighted = YES;
Run Code Online (Sandbox Code Playgroud) 我正在创建自己的自定义UITableViewCell用作原型单元的后端.在我的类中,我重写了initwithstyle:reuseIdentifier:方法来进行一些自定义初始化,但我的初始化程序没有被调用.我在其内部的第一行有一个断点,以及一个断点dequeueResusableCellWithIdentifier:.dequeueResusableCellWithIdentifier:调用该方法,它返回一个已启动的单元格,但未达到断点initwithstyle:reuseIdentifier:.任何帮助都会很棒.
我有一个自定义单元格,里面有几个UIButton.我在按钮上创建了类似的目标操作:
[cell.customLocationButton addTarget:self action:@selector(customLocationButtonTap:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
尽管我没有在UIButtons上看到默认的iOS淡入淡出动画,但这些动作效果很好?是否有我需要启用的东西 - 我认为它们是使用IB的UIButton时的标准?
我在以这种方式创建的测试项目中有UITableView:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
tableView.delegate = self
tableView.dataSource = self
}
// height?
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
//return cellHeightWithoutSeparator + cellSeparatorHeight
//print("YES!")
return 80 // arbitrary
}
// table wants a UITableViewCell for each row
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = …Run Code Online (Sandbox Code Playgroud) 我UIButton在聊天屏幕的底部有一个。我TouchDown用来检测用户开始按住按钮并开始录音(标准信使应用程序功能)。
问题是当按钮位于屏幕底部时,从我开始按住按钮的那一刻到TouchDown触发的那一刻有 1 秒的延迟。
当显示键盘并且底部向上移动屏幕时,完全没有延迟。
我发现了一个类似的问题,iOS - UITableViewCell 中 UIButton 的延迟“触摸”事件,但该按钮不在表格视图或滚动视图中
覆盖touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)按钮的方法并仅打印事件表明它也具有相同的滞后。
这让我觉得滞后与屏幕底部的按钮位置有关。
我有一个带有动态填充行的 UITableView,但顶部还有一个部分,其中包含一个始终相同的特殊单元格(具有不同的标识符)。
我在这个单元格中添加了两个按钮,它们确实可以工作,但反应很差。也就是说,大约0.25秒后才会出现突出显示。
我正在使用以下稍微定制的按钮:
import UIKit
class HighlightingButton: UIButton {
override var isHighlighted: Bool {
didSet {
if isHighlighted {
backgroundColor = UIColor.lightGray
} else {
backgroundColor = UIColor.white
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用户获得点击按钮的清晰反馈非常重要。然而,由于缓慢的突出显示,这并不令人满意,尽管事件似乎被快速触发(通过打印一些输出来判断)。
在普通视图中,此突出显示按钮按预期工作,并且突出显示会随着我的点击而快速闪烁。
UITableViewCell 的事件处理中是否存在导致这种缓慢的原因?
更新
我创建了一个简约的示例项目来演示该问题。没有任何手势识别器,但仍然存在非常明显的延迟。
ios ×5
uitableview ×5
swift ×3
uibutton ×3
iphone ×2
objective-c ×2
xcode ×2
cocoa-touch ×1
ios7 ×1
uikit ×1
uiscrollview ×1