如何使UITableView标题可选?

kay*_*mas 18 uitableview ios

我为UITableView制作了一个自定义的section-header,其中包括一些控件,如分段控件,UIImageView等.它成功出现了,但它不具有可调性,因此我无法与其控件进行交互.

我需要知道如何才能使这个标题视图可选?

Dha*_*nia 25

使用UITableViewDelegate无法做到这一点.

您必须向yourHeaderView添加UITapGestureRecognizer,如:

UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureHandler:)];
[singleTapRecognizer setDelegate:self];
singleTapRecognizer.numberOfTouchesRequired = 1;
singleTapRecognizer.numberOfTapsRequired = 1;   
[yourHeaderView addGestureRecognizer:singleTapRecognizer];


-(void) handleGesture:(UIGestureRecognizer *)gestureRecognizer; //do in this method whatever you want
Run Code Online (Sandbox Code Playgroud)

对于Swift 3.0

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(YOURVIEWCONTROLLER.TapGestureRecognizer(_:)))
yourHeaderView.addGestureRecognizer(tapGesture)

func TapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
    //do your stuff here 
}
Run Code Online (Sandbox Code Playgroud)

Swift> = 4.0

添加 继承的UIGestureRecognizerDelegate类引用

let tap = UITapGestureRecognizer(target: self, action:#selector(self.handleTap(_:)))
tap.delegate = self
self.view.addGestureRecognizer(tap)

  @objc func handleTap(_ sender: UITapGestureRecognizer) {
        //Do your work 
    }
Run Code Online (Sandbox Code Playgroud)

可能会有所帮助.

快乐的编码.

  • 只需快速说明:`.numberOfTouchesRequired`和`.numberOfTapsRequired`默认设置为1,因此您不需要手动设置它们,除非它不是1. (2认同)

dul*_*gan 7

如果您需要知道点击部分的索引,您可以使用以下模式(Swift 4):

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 44))

    // Configure your view here
    // ...

    let tapGestureRecognizer = UITapGestureRecognizer(
        target: self,
        action: #selector(headerTapped(_:))
    )
    view.tag = section
    view.addGestureRecognizer(tapGestureRecognizer)
    return view
}

@objc func headerTapped(_ sender: UITapGestureRecognizer?) {
    guard let section = sender?.view?.tag else { return }

    // Use your section index here
    // ...
}
Run Code Online (Sandbox Code Playgroud)


hkd*_*lex 5

这对我有用:

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let v = UITableViewHeaderFooterView()
    v.textLabel?.text = "Header Text"
    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
    tapRecognizer.delegate = self
    tapRecognizer.numberOfTapsRequired = 1
    tapRecognizer.numberOfTouchesRequired = 1
    v.addGestureRecognizer(tapRecognizer)
    return v
}

func handleTap(gestureRecognizer: UIGestureRecognizer)
{
    print("Tapped")
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您使用`tableView.dequeueReusableHeaderFooterView`来回收现有视图而不是每次需要确保不反复添加`UITapGestureRecognizer`时创建新视图. (6认同)

Kud*_*oCC 2

创建一个用作剖面头视图的自定义视图并实现该方法 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event,当您的手指点击它时它将被调用。