2013-11-15 20 views
14

我为UITableView制作了一个自定义节标题,其中包含一些控件,如分段控件,UIImageView等。它成功出现,但它不能点击,所以我无法与其控件进行交互。如何使UITableView标题可选?

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

+2

发布一些代码... – Ilario

+2

如果您正在使用ImageView作为基本视图,然后使用imageView。userInteractionEnabled = YES; – Savitha

+0

发布您的代码。 – manujmv

回答

1

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

4

创建一个自定义部分headerView ..然后添加点击手势。

UITapGestureRecognizer * recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 

//This method will be called on Tap of section header 
- (void)handleTap:(UITapGestureRecognizer *)sender { 
//Do the action on Tap 
} 
18

有没有办法与UITableViewDelegate做到这一点。

你有一个UITapGestureRecognizer添加到yourHeaderView像:

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 

为SWIFT 3.0

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

func TapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) { 
    //do your stuff here 
} 

可能会有所帮助。

快乐编码。

+0

如果屏幕中有多个部分(不需要滚动),则所有部分的点击操作都相同。 – Vahid

+2

只是一个简单的说明:'.numberOfTouchesRequired'和'.numberOfTapsRequired'默认设置为1,所以你不需要手动设置它们,除非它是非1的东西。 – QuantumHoneybees

1

我在斯威夫特实现:

在你UITableViewController

let myView = MyView() 

let tapRecognizer = UITapGestureRecognizer(target: myView, action: "handleTap") 
myView.addGestureRecognizer(tapRecognizer) 

self.tableView.tableHeaderView = myView 

MyView

class MyView: UIView { 

    func handleTap() { 
     // Handle touch event here 
    } 
} 
2

您可以简单地添加一个UIButton到你的头视图(或您的标题视图可以成为UIButton本身)。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ 

     static NSString *cellIdentifier = @"cellIdentifier"; 

    UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    UIButton *cellButton = (UIButton*)[cell viewWithTag:1]; 
    [cellButton addTarget:self action:@selector(premiumSectionClicked:) forControlEvents:UIControlEventTouchUpInside]; 

    return cell; 
} 

-(void)buttonTapped:(id)sender{ 

} 
+0

最简单的解决方案:) – JOM

1

这个迅速解决:

let tapR : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "gotoHeaderArticle") 
tapR.delegate = self 
tapR.numberOfTapsRequired = 1 
tapR.numberOfTouchesRequired = 1 
yourView.addGestureRecognizer(tapR) 

然后实现

func gotoHeaderArticle() { 

} 

确保使您的通话视图 - 控制坚持UIGestureRecognizerDelegate

3

这里是我工作:

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") 
} 
+2

要注意,如果你需要使用'tableView.dequeueReusableHeaderFooterView'来回收一个现有的视图,而不是每次创建一个新的视图,以确保你不需要反复添加'UITapGestureRecognizer'。 – Alnitak

3

溶液滴简单雨燕3.0

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

     let v = UITableViewHeaderFooterView() 
     let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) 
     v.addGestureRecognizer(tapRecognizer) 
     return v 
    } 


    func handleTap(gestureRecognizer: UIGestureRecognizer) 
    { 
     controller?.view.endEditing(true) 
    } 
+0

也在Swift 2中工作,谢谢! –

0

更新雨燕3.1

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(TapGestureRecognizer(gestureRecognizer:))) 
yourView.addGestureRecognizer(tapGesture) 

func TapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) { 
     //do your stuff here 
     print("Gesture") 
    } 
0

这里是我工作

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ 
     static NSString *cellIdentifier = @"cellIdentifier"; 
    YourHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    cell.imageView.image = [image imageNamed:@"imageName"]; 
cell.segmentedControl.tag = section; 
[cell.segmentedControl addTarget:self 
        action:@selector(action:) 
      forControlEvents:UIControlEventValueChanged]; 
    return cell; 
} 

- (void)action:(id)sender{ 
    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender; 
    NSLog(@"selected section:%ld",(long)segmentedControl.tag); 

}