为什么我的“Upputton内部”活动没有被调用?

时间:2014-01-15 03:20:22

标签: ios objective-c uibutton

我已经制作了很多按钮,我无法弄清楚为什么这个按钮不起作用。

我的层次结构设置如下:

View -> Scroll View -> Subview -> Button

此子视图中还有很多其他项目,触摸后每个项目都有效。在界面构建器中,我可以看到“ Touch Up Inside ”事件绑定到我的方法

"- (IBAction)favoritesButtonDepressed:(id)sender"

然而,当我点击按钮时,该方法永远不会执行,我的断点随后也不会被击中。

我注意到,即使我按住按钮上的按钮,标签也不会改变颜色(即使启用了高亮显示触摸),但视图上的其他按钮却没有。

按钮上的用户交互以及层次结构中的所有内容都已启用。

为了让子视图中的项目能够接收触摸事件,我的滚动视图看起来像the 4th answer in this post

15 个答案:

答案 0 :(得分:51)

啊,啊,我明白了。事实证明,包含按钮的子视图(以及其他控件)的高度为740,按钮的Y值为781.向上移动按钮可以解决问题。由于一切都正确显示,我没想到检查子视图的高度。

答案 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)

答案 9 :(得分:1)

在我的情况下,按钮的IBAction无效,我尝试了很多方面。所以我为按钮创建了一个IBOutlet,并使用&#34; addTarget&#34;添加了单击操作。方法就像魅力一样。

[myButton addTarget:self action:@selector(dismissClickFunction:) forControlEvents:UIControlEventAllEvents];

答案 10 :(得分:0)

我遇到了同样的问题。

我在视图中放置的xib中有一个按钮。

我将xib的实例保留为导入时设置的默认小尺寸,因为我正在代码中自动调整其大小以处理设备旋转。

即使按钮明显位于屏幕中间,这也导致按钮不响应。

我通过简单地更改xib实例的布局以填充父视图来修复它。

答案 11 :(得分:0)

故障排除:

  • 确保按钮前面没有隐藏的视图。
  • 确保用户交互设置为true。

答案 12 :(得分:0)

检查是否缺少任何约束。所有约束都应平衡,没有红线。这为我解决了这个问题。

答案 13 :(得分:0)

确保未将button.isEnabled设置为false

答案 14 :(得分:0)

我的 ViewController 是另一个 ViewController 中某个区域的子控制器。为了简化,我删除了其中的一堆控件,但剩余的按钮将不再处理手柄点击,尽管已启用,并且所有视图都启用了 userInteraction。

我尝试动态创建一个按钮,没有用。认为我从原始构建中获得了不好的资源,我删除了派生数据,退出了 Xcode,删除了应用程序并从头开始重建,不行。

最后我尝试用黄色绘制父视图的背景,没有出现,确认问题是它的框架。父视图框架类似于情节提要中的 (0,0,320,200),但在 viewDidAppear 中,它的高度仅为 0 点,垂直偏移 150 点。我尝试手动设置它,幸好 hack 不起作用。所以我对行为不端的故事板做了你应该做的事情,我用火烧掉了它!

实际上我删除了它并创建了一个新的故事板来替换它,只包含新设计的视图和控件。链接到我的 ViewController 代码,它运行没有任何问题。