我是目标c的新手,我对学习新技术非常感兴趣。
我在标签上有一个UITapGestureRecognizer。我正在使用2个标签,当我点击label1加载一些数据Tableview时,当我点击标签2时我想更改Tableview。
我没有找到符合我要求的任何解决方案。所以任何人都可以帮助我。
建议我在点击UILabel时如何更改TableView数据。
答案 0 :(得分:1)
您可以按照以下方式执行此操作:
方式1:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
..
..
..
// Here is your stuff for cell
UILabel *lbl1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 80, 40)];
[lbl1 setText:@"Label"];
[lbl1 setUserInteractionEnabled:YES];
[cell.contentView addSubview:lbl1];
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
tap.tag = [NSIndexPath row];
[tap setNumberOfTapsRequired:1];
[lbl addGestureRecognizer:tap];
...
}
- (void)tapAction:(id)sender {
switch(((UITapGestureRecognizer *)sender).view.tag) {
case 0:
// code for first TableView
break;
case 1:
// code for second TableView
break;
....
}
}
方式2:
cellForRowAtIndexPath:
方法中的:
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
tap.tag = [NSIndexPath row];
...
处理程序方法:
- (void)tapAction:(id)sender
{
switch(((UITapGestureRecognizer *)sender).tag)
{
case 0:
NSLog(@"Tap action 1");
break;
case 1:
NSLog(@"tap action 2");
break;
..... }
答案 1 :(得分:0)
我假设你已经为tableview设置了datasource / delegate方法?然后在点击标签时更改这些方法中的必要内容并简单地调用
[self.tableView reloadData]
如果你对我所说的内容一无所知,那么我建议你先开始阅读一些关于tableviews的手册,然后才开始在SO上提问:)
答案 2 :(得分:0)
欢迎使用Stack Overflow!
这个答案应该有助于您清楚地了解情况,并让您更深入地了解如何使用表格视图和按钮来完成您所需的工作。
要Alladinian's发表评论,我强烈建议切换到UIButton
对象,而不要使用UILabel
个对象。这样,您的元素仍然可以显示您的文本(与标签一样)但您可以使用按钮类的内置目标功能。
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
关于您的问题,再次,只需使用专为此情况设计的内置方法:
- (void)reloadData;
使用/设置UITableViewDelegate
和UITableViewDataSource
可以使用此方法。像这样:这里是一个通用的UIViewController
类的例子,它符合(可以正确使用)方便的UITableView
代表。
头文件(SomeClassController.h)
// SomeClassController.h
#import <UIKit/UIKit.h>
@interface SomeClassController : UIViewController <UITableViewDelegate, UITableViewDataSource>
// do anything here. properties, methods, etc :)
@property (nonatomic, ...) UITableView *tableView;
@end
实施文件(SomeClassController.m)
// ...
- (void)viewDidLoad {
self.tableView.delegate = self;
self.tableView.dataSource = self;
}
现在,通过使用UIButton
个对象,您可以设置一个方法来处理用户通过执行方法触摸屏幕。像这里:
- (void)viewDidLoad {
...
[someButton addTarget:self action:@selector(didTouchButton:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)didTouchButton:(__kindof UIButton *)button {
// Here you received the users touch event on the button, do what you like!
// As your question asked how to reload table data, simply add this line
// after following my other steps.
[self.tableView reloadData]; // Here the magic is done!
// This method will automatically reload the table view to display the
// most recently updated data you have given it.
}
确保在重新加载之前更改数据,否则它可能不会以视觉或内容方式更改。
快乐的编码!