gpt4 book ai didi

iphone - didSelectRowAtIndexPath 在极少数情况下被调用或大多数时间不被调用

转载 作者:行者123 更新时间:2023-11-28 22:32:12 24 4
gpt4 key购买 nike

于是又是著名的话题。我不得不说我已经在这里阅读了所有类似的主题,并且还用谷歌搜索了它。但没有任何帮助。
我的应用程序的结构如下:RootControllerTabController,那么每个选项卡都有自己的 NavigationController,里面有 ViewController。在 ViewController 中,我放置了一个 UITableView。全部在 IB 中设计。 DataSourceDelegate 已正确连接。 TableView 使用自定义 TableCell,但我也尝试过标准的 TableCell。还有一个 UISegmentedControl 来改变 DataSource 数组
我检查并仔细检查的内容(简而言之,我在类似主题中发现的所有内容):

  • 我的 ViewController 确实声明并实现了 UITableViewDelegateUITableViewDataSource(或者不可能在 IB 中连接相应的属性)
  • DataSourceDelegate 属性在 IB 中正确连接。它也被 setDelegate:selfsetDataSource:self 复制到代码中。
  • 我的自定义 TableCell 已标记为已启用用户交互
  • 我的自定义 TableCell 包含 2 个标签和一张图像,都没有 User Interaction Enabled 标记
  • 它调用[tableView reloadData]
  • 尝试[tableView becomeFirstResponder]
  • TableView 有诸如选择单个单元格、允许用户交互、允许编辑时选择单元格等选项标记
  • didSelectRowAtIndexPath 中没有像 DEselect 之类的拼写错误。此外,TableView 的委托(delegate)方法是通过更改方法内部代码从工作应用程序复制粘贴而来的。我的意思是方法名称/声明中不能有任何拼写错误。
  • didSelectRowAtIndexPath 方法只包含一行代码,它是 NSLog(@"didSelectRowAtIndexPath");
  • XCode 重启了几次
  • 使清理所有目标
  • 在项目中没有使用ARC
  • 在显示表格时没有繁重的操作或任何其他操作在运行

TableView 本身就可以很好地填充数据并显示数据。但是,如果我点击单元格,它会以蓝色突出显示,看起来它会卡住选择。从它突出显示一个单元格的那一刻起,任何其他单元格都无法突出显示,并且无法取消选择突出显示的单元格。未调用 didSelectRowAtIndexPath。但是,如果尝试通过拖动表格多次点击单元格,那么有时该方法会调用。就像在极少数情况下被调用一样,如果表中的记录不超过 3 个。这是一个非常奇怪的问题,我无法解决。我觉得 TableView 收到了点击,但不知何故无法处理它。
View Controller :

@interface SecondTabVC : UIViewController <UITableViewDelegate,UITableViewDataSource> 
{

IBOutlet UISegmentedControl * sgmTopMenu; //has 3 segments

NSArray * arrHrefLinks;
NSArray * arrImgLinks;

IBOutlet UIImageView * imgFiles;

int selectedSegmentIndex;
IBOutlet UITableView* tblLinks;

}

@property (retain,nonatomic) IBOutlet UISegmentedControl * sgmTopMenu;

@property (retain,nonatomic) IBOutlet UIImageView * imgFiles;

@property (retain,nonatomic) NSArray * arrHrefLinks;
@property (retain,nonatomic) NSArray * arrImgLinks;

@property (retain,nonatomic) IBOutlet UITableView* tblLinks;


-(IBAction)onTopMenuTap:(id)sender;

@end

实现:

    // called when UIsegment's Value changed, linked in IB
-(IBAction)onTopMenuTap:(id)sender
{

selectedSegmentIndex = ((UISegmentedControl*)sender).selectedSegmentIndex;

NSLog(@"onTopMenuTap: %i",selectedSegmentIndex);

switch (selectedSegmentIndex) {
case 0:
case 1:
tblLinks.hidden = NO;
tblLinks.delegate = self;
tblLinks.dataSource = self;
tblLinks.userInteractionEnabled = YES;
tblLinks.allowsSelection=YES;
tblLinks.allowsSelectionDuringEditing = YES;
[tblLinks reloadData];
[tblLinks becomeFirstResponder];
break;
case 2: // settings
tblLinks.hidden = YES;
// tblLinks.delegate = nil;
// tblLinks.dataSource = nil;
break;
}

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
int numberOfRowsInSection=0;
switch (selectedSegmentIndex) {
case 0:
numberOfRowsInSection = arrHrefLinks.count;
break;
case 1:
numberOfRowsInSection = arrImgLinks.count;
break;
}
return numberOfRowsInSection;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

LinkCell *cell= (LinkCell*)[tableView dequeueReusableCellWithIdentifier:LINK_CELL_ID];

if (cell == nil)
cell = [[[NSBundle mainBundle]
loadNibNamed:LINK_CELL_ID
owner:self
options:nil] lastObject];

// Setting up the cell...
HTMLNode * node = nil;
NSString * header = nil;
switch (selectedSegmentIndex) {
case 0:
node = [arrHrefLinks objectAtIndex:[indexPath row]];
header = [node getAttributeNamed:@"title"];
if (!header || header.length==0)
header = [node contents];
if (!header || header.length==0)
header = [node allContents];
if (!header || header.length==0)
[node getAttributeNamed:@"name"];
cell.lblName.text = header;
//cell.textLabel.text = header;
cell.lblUrl.text = [node getAttributeNamed:@"href"];
break;
case 1:
node = [arrImgLinks objectAtIndex:[indexPath row]];
header = [node getAttributeNamed:@"title"];
if (!header || header.length==0)
[node getAttributeNamed:@"name"];
if (!header || header.length==0)
header = [node contents];
if (!header || header.length==0)
header = [node allContents];
cell.lblName.text = header;
//cell.textLabel.text = [header copy];
cell.lblName.text = [node getAttributeNamed:@"name"];
//cell.lblUrl.text = [node getAttributeNamed:@"src"];

break;
}

return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didSelectRowAtIndexPath");
}

最佳答案

我找到了问题的根源。它是 PSWebView。它被放置在第一个选项卡的 View 中,但似乎它拦截了任何其他 Controller 中的所有水龙头。摆脱它解决了我的问题。顺便说一句,PSWebView 不使用手势,所以问题不在于手势。

关于iphone - didSelectRowAtIndexPath 在极少数情况下被调用或大多数时间不被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17084332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com