Ios UIButton在UITableview中不工作

Ios UIButton在UITableview中不工作,ios,iphone,uitableview,uibutton,Ios,Iphone,Uitableview,Uibutton,有UITableviewcell-->其中我有4个不同的UIView,其中3个视图有UIView按钮。我想使ui按钮可点击。第一次按钮是可点击的,但当我转到下一个屏幕并返回时,按钮不起作用。请让我知道如何实现这一点?谢谢 PHMyTripView*tripsView=[[PHMyTripView alloc]initWithFrame:CGRectMake(10,5,self.frame.size.width-20,cell.frame.size.height)] 这是因为这些单元格是可重用的,

UITableviewcell
-->其中我有4个不同的UIView,其中3个视图有UIView按钮。我想使
ui按钮
可点击。第一次按钮是可点击的,但当我转到下一个屏幕并返回时,按钮不起作用。请让我知道如何实现这一点?谢谢

PHMyTripView*tripsView=[[PHMyTripView alloc]initWithFrame:CGRectMake(10,5,self.frame.size.width-20,cell.frame.size.height)]


这是因为这些单元格是可重用的,如果你转到另一个屏幕,按钮可能会在UI或功能上混乱到不同的单元格中

解决这个问题的方法是添加标签。您可以定义cell.tag=indexPath.row*10左右


然后在绘制按钮时,检查条件,如果cell.tag==?,然后添加按钮。

之所以会出现这种情况,是因为单元格是可重用的,如果转到另一个屏幕,按钮可能会在UI或功能上混乱到不同的单元格中

解决这个问题的方法是添加标签。您可以定义cell.tag=indexPath.row*10左右


然后在绘制按钮时,检查条件,如果cell.tag==?,然后添加按钮。

您应该在每个
UITableView
子视图上关闭
delaysContentTouches
,它是
UIScrollView
类的一个实例。 子类
UITableView
和重写
initWithFrame
方法:

.h文件

@interface NoDelaysOnTouchTableView : UITableView

@end
和.m文件

#import "NoDelaysOnTouchTableView.h"

@implementation NoDelaysOnTouchTableView

- (id) initWithFrame: (CGRect) frame
{
    self = [super initWithFrame: frame];

    if (self) {
        for (id view in self.subviews) {
            if ([NSStringFromClass([view class]) isEqualToString: @"UITableViewWrapperView"]) {
                if ([view isKindOfClass: [UIScrollView class]]) {
                    // turn OFF delaysContentTouches in the hidden subview
                    UIScrollView* scroll = (UIScrollView*)view;
                    scroll.delaysContentTouches = NO;
                }
                break;
            }
        }
    }
    return self;
}

@end

下一步-使用此子类(创建
NoDelaysOnTouchTableView
的实例)可以立即按下
UIButton

您应该在每个
UITableView
子视图上关闭
delaysContentTouches
,该子视图是
UIScrollView
类的实例。 子类
UITableView
和重写
initWithFrame
方法:

.h文件

@interface NoDelaysOnTouchTableView : UITableView

@end
和.m文件

#import "NoDelaysOnTouchTableView.h"

@implementation NoDelaysOnTouchTableView

- (id) initWithFrame: (CGRect) frame
{
    self = [super initWithFrame: frame];

    if (self) {
        for (id view in self.subviews) {
            if ([NSStringFromClass([view class]) isEqualToString: @"UITableViewWrapperView"]) {
                if ([view isKindOfClass: [UIScrollView class]]) {
                    // turn OFF delaysContentTouches in the hidden subview
                    UIScrollView* scroll = (UIScrollView*)view;
                    scroll.delaysContentTouches = NO;
                }
                break;
            }
        }
    }
    return self;
}

@end

下一步-使用此子类(创建
NoDelaysOnTouchTableView
的实例)可以立即按下
ui按钮。

我认为原因可能是多个。 您可以尝试:

  • 检查单元格中每个按钮的约束
  • 在cellForRow中,您可以使用相对@selector对每个按钮执行addTarget:操作,并在此方法中检查与按钮关联的对象(数据源)
  • 不要在单元格中使用addSubView,而是使用Xib(或在tableView中的故事板中定义单元格),以便设置约束

我希望,我已经帮了你。

我认为原因是多方面的。 您可以尝试:

  • 检查单元格中每个按钮的约束
  • 在cellForRow中,您可以使用相对@selector对每个按钮执行addTarget:操作,并在此方法中检查与按钮关联的对象(数据源)
  • 不要在单元格中使用addSubView,而是使用Xib(或在tableView中的故事板中定义单元格),以便设置约束

我希望,我已经帮到你了。

谢谢大家的回复,但它们对我的情况不起作用。 答案是这样的。由于UITableview返回屏幕时正在重新加载。帧放置错误,因此按钮无法单击

使用了这一行代码,效果很好


self.tripsView.autoresizingMask=uiviewsautoresizingflexiblewidth | uiviewsautoresizingflexiblewhight

感谢大家的回应,但他们在我的情况下不起作用。 答案是这样的。由于UITableview返回屏幕时正在重新加载。帧放置错误,因此按钮无法单击

使用了这一行代码,效果很好


self.tripsView.autoresizingMask=uiviewsautoresizingflexiblewidth | uiviewsautoresizingflexiblewhight

并不是专门针对这个问题,但对于某些人来说可能是这样。请尝试在单元格的
contentView
中添加子视图。
不要使用
addSubview(textField)
而使用
contentView。addSubview(textField)
并不是专门针对这个问题,但对于某些人可能是这样。尝试在单元格的
contentView
中添加子视图。
不要使用
addSubview(textField)
而使用
contentView.addSubview(textField)

显示整个代码我已经更新了代码片段。没有一个答案真的有用。我确实改变了按钮的背景色,以查看其框架,一切正常。但它只是不可点击,而是转到didSelectRowAtIndexPath方法。让我知道任何澄清。谢谢大家的回复。我已经更新了代码片段。没有一个答案真的有用。我确实改变了按钮的背景色,以查看其框架,一切正常。但它只是不可点击,而是转到didSelectRowAtIndexPath方法。让我知道任何澄清。谢谢大家的回复。期待正确的答案。