我已经制作了很多按钮,我无法弄清楚为什么这个按钮不起作用。
我的层次结构设置如下:
View -> Scroll View -> Subview -> Button
此子视图中还有很多其他项目,触摸后每个项目都有效。在界面构建器中,我可以看到“ Touch Up Inside ”事件绑定到我的方法
"- (IBAction)favoritesButtonDepressed:(id)sender"
。
然而,当我点击按钮时,该方法永远不会执行,我的断点随后也不会被击中。
我注意到,即使我按住按钮上的按钮,标签也不会改变颜色(即使启用了高亮显示触摸),但视图上的其他按钮却没有。
按钮上的用户交互以及层次结构中的所有内容都已启用。
为了让子视图中的项目能够接收触摸事件,我的滚动视图看起来像the 4th answer in this post。
答案 0 :(得分:51)
答案 1 :(得分:15)
我认为您已将按钮放在UIImageView上,如果是这样,您必须为该UIImageView启用UserInteraction。请检查。
答案 2 :(得分:12)
确保您的按钮位于superView的范围内,
如果按钮位于superView的边界之外,则按钮将无法点击,
因为hitTest
函数
答案 3 :(得分:11)
如果在按钮的任何超级视图上实施了UITapGestureRecognizer
。然后UIButtonEventTouchUpInside
不会被解雇。
你应该像这样实现UITapGestureRecognizer
tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[tapGesture setCancelsTouchesInView:NO]; // This should do what you want
[tapGesture setDelegate:self];
答案 4 :(得分:4)
布局如下:
查看 - >子视图(UIView) - >按钮
通过勾选"用户交互已启用" Subview(UIView)属性中的复选框。
答案 5 :(得分:3)
另一件需要考虑的事情是你在其上放置了另一个视图吗?
例如,如果您从笔尖加载另一个视图并错误地将其框住,那么它可能会出现在按钮顶部,从而拦截任何按下。
您可以使用“Debug View Heirachy”控件检查这是XCode 6。
答案 6 :(得分:2)
如果您拥有父级UIView,则可以尝试将其userInteractionEnabled属性设置为True,在某些情况下,它可以解决问题。
$(document).ready(function () {
var loadGrid = function (fromDate = null, toDate = null) {
$.ajax({
url: "/Home/SearchResults",
dataType: 'json',
beforeSend: function () {
$("jqxgrid").html('');
},
error: function (json, textStatus, errorThrown) {
alert(' Error :' + errorThrown);
},
data: {
fromdate: fromDate,
toDate: toDate
},
success: function (response) {
// initailize grid
var gridData = response;
window.searchData = response.SearchResults;
var gridSource =
{
localdata: gridData,
datatype: 'json'
};
var gridDataAdapter = new $.jqx.dataAdapter(gridSource);
$("#jqxgrid").jqxGrid(
{
width: 1500,
source: gridDataAdapter,
pageable: true,
autoheight: true,
pagesize: 20,
selectionmode: 'singlecell',
columns: [
{ text: 'Edit', datafield: 'Edit', width: 250, columntype: 'button', cellsrenderer: function () {
return `<a href='' data-toggle='modal' data-target='#JsonModal' id='elem' /> Get Json`},
buttonclick: function (row) {
editrow = row;
var offset = $("#jqxgrid").offset();
var dataRecord = $("#jqxgrid").jqxGrid('getrowdata', editrow);
selectedFirstName = dataRecord.FirstName;
}
}
]
});
}
});
}
$(document).on("hidden.bs.modal", "#JsonModal", function () {
$(this).find("#modal-content").html(""); // just clear the contents.
$(this).find("#modal-content").remove(); // remove from dom.
});
$('#JsonModal').on('shown.bs.modal', function () {
$('#JsonModal').find('.modal-body').append('<div id="modal-content">' + selectedFirstName + '</div> ');
});
});
在这种情况下,我已将ChildView的userInteraction设置为true并解决了问题。
答案 7 :(得分:1)
我最近有类似的东西;
尝试删除Controller中的(IBAction)favoritesButtonDepressed:(id)sender
声明(和方法),然后再次从Interface Builder“拖放”它。
答案 8 :(得分:1)
请参阅以下有助于您的讨论 UIButton event 'Touch Up Inside' not working. 'Touch Down' works fine
UIButton touch up inside event not working in ios5 while it's ok in ios6
UIButton event 'Touch Up Inside' not working. 'Touch Down' works fine
答案 9 :(得分:1)
在我的情况下,按钮的IBAction无效,我尝试了很多方面。所以我为按钮创建了一个IBOutlet,并使用&#34; addTarget&#34;添加了单击操作。方法就像魅力一样。
[myButton addTarget:self action:@selector(dismissClickFunction:) forControlEvents:UIControlEventAllEvents];
答案 10 :(得分:0)
我遇到了同样的问题。
我在视图中放置的xib中有一个按钮。
我将xib的实例保留为导入时设置的默认小尺寸,因为我正在代码中自动调整其大小以处理设备旋转。
即使按钮明显位于屏幕中间,这也导致按钮不响应。
我通过简单地更改xib实例的布局以填充父视图来修复它。
答案 11 :(得分:0)
故障排除:
答案 12 :(得分:0)
检查是否缺少任何约束。所有约束都应平衡,没有红线。这为我解决了这个问题。
答案 13 :(得分:0)
确保未将button.isEnabled
设置为false
答案 14 :(得分:0)
我的 ViewController 是另一个 ViewController 中某个区域的子控制器。为了简化,我删除了其中的一堆控件,但剩余的按钮将不再处理手柄点击,尽管已启用,并且所有视图都启用了 userInteraction。
我尝试动态创建一个按钮,没有用。认为我从原始构建中获得了不好的资源,我删除了派生数据,退出了 Xcode,删除了应用程序并从头开始重建,不行。
最后我尝试用黄色绘制父视图的背景,没有出现,确认问题是它的框架。父视图框架类似于情节提要中的 (0,0,320,200),但在 viewDidAppear 中,它的高度仅为 0 点,垂直偏移 150 点。我尝试手动设置它,幸好 hack 不起作用。所以我对行为不端的故事板做了你应该做的事情,我用火烧掉了它!
实际上我删除了它并创建了一个新的故事板来替换它,只包含新设计的视图和控件。链接到我的 ViewController 代码,它运行没有任何问题。