我为UITableView制作了一个自定义节标题,其中包含一些控件,如分段控件,UIImageView等。它成功出现,但它不能点击,所以我无法与其控件进行交互。如何使UITableView标题可选?
我需要知道如何使这个标题视图可选?
我为UITableView制作了一个自定义节标题,其中包含一些控件,如分段控件,UIImageView等。它成功出现,但它不能点击,所以我无法与其控件进行交互。如何使UITableView标题可选?
我需要知道如何使这个标题视图可选?
创建一个自定义视图,用作节头视图并实现方法 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
,它会在您的手指点击它时被调用。
创建一个自定义部分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
}
有没有办法与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
}
可能会有所帮助。
快乐编码。
如果屏幕中有多个部分(不需要滚动),则所有部分的点击操作都相同。 – Vahid
只是一个简单的说明:'.numberOfTouchesRequired'和'.numberOfTapsRequired'默认设置为1,所以你不需要手动设置它们,除非它是非1的东西。 – QuantumHoneybees
我在斯威夫特实现:
在你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
}
}
您可以简单地添加一个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{
}
最简单的解决方案:) – JOM
这个迅速解决:
let tapR : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "gotoHeaderArticle")
tapR.delegate = self
tapR.numberOfTapsRequired = 1
tapR.numberOfTouchesRequired = 1
yourView.addGestureRecognizer(tapR)
然后实现
func gotoHeaderArticle() {
}
确保使您的通话视图 - 控制坚持UIGestureRecognizerDelegate
这里是我工作:
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")
}
要注意,如果你需要使用'tableView.dequeueReusableHeaderFooterView'来回收一个现有的视图,而不是每次创建一个新的视图,以确保你不需要反复添加'UITapGestureRecognizer'。 – Alnitak
溶液滴简单雨燕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)
}
也在Swift 2中工作,谢谢! –
更新雨燕3.1
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(TapGestureRecognizer(gestureRecognizer:)))
yourView.addGestureRecognizer(tapGesture)
func TapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
//do your stuff here
print("Gesture")
}
这里是我工作
-(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);
}
发布一些代码... – Ilario
如果您正在使用ImageView作为基本视图,然后使用imageView。userInteractionEnabled = YES; – Savitha
发布您的代码。 – manujmv