gpt4 book ai didi

iphone - 如何调用另一个类的方法?

转载 作者:行者123 更新时间:2023-12-03 20:48:46 24 4
gpt4 key购买 nike

编辑2:我尝试总结我的问题和解决方案:

我有一个名为DetailedViewController 的TableViewController。我的目的是激活 TouchesBegan 来识别滑动等 Action ,通常,touchesbegan 方法被替换为 DidSelectRow 方法。在 stackoverflow 上的许多帖子中,子类化 UITableView 是实现这一点的唯一可能性。

因此,我使用 .xib 文件创建了一个 SpecificTable,并通过将 SpecificTable 添加为 nib 文件,将其用作 UITableViewController 的子类。选择一行工作正常,而且 TouchesBegan 方法(我在 SpecificTable.m 中调用了一个带有警报的方法。)但现在我想在 UITableViewController (DetailedViewController) 中调用一个方法,其中 moveToNextItem 的声明如下

 -(void)moveToNextItem:(id)sender
{
[self.navigationController
pushViewController:bbarChart animated:YES];
}

但是通过使用 [self moveToNextItem] 调用此方法,应用程序会因触摸而崩溃。 (在调试器模式下,应用程序在 [self moveToNextItem] 行崩溃。调用DetailedViewController.m方法的正确方法是什么?

最佳答案

更新:您可能应该子类化 UITableViewCell 而不是 UITableView。然后在 TableView Controller 的 cellForRowAtIndexPath: 方法中,返回此子类的实例而不是 UITableViewCell 的实例。

您还需要将DetailedViewController指针传递给单元格,以便您可以在touchesBegan等方法中调用其moveToNextItem方法。

根据您的需要调整此示例:

MyTableViewCell.h

@class DetailedViewController;
@interface MyTableViewCell : UITableViewCell {
DetailedViewController *dvc;
}
@property (nonatomic, retain) DetailedViewController *dvc;
@end

MyTableViewCell.m

#import "MyTableViewCell.h"
#import "DetailedViewController.h"
@implementation MyTableViewCell
@synthesize dvc;
- (void)someMethod { // This would be your touchesBegan, etc. methods
[dvc moveToNextItem];
}
- (void)dealloc {
[dvc release]; // We retained dvc so we have to release it when we're done with it
[super dealloc];
}
@end

DetailedViewController.h

@interface DetailedViewController : UITableViewController {
// iVars here
}
// Methods and properties here
- (void)moveToNextItem;
@end

DetailedViewController.m

#import "DetailedViewController.h"
#import "MyTableViewCell.h"
@implementation DetailedViewController
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyTableViewCell"];
if(cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyTableViewCell"] autorelease];
cell.dvc = self; // This gives the cell a reference to the detailed view controller
}
return cell;
}
- (void)moveToNextItem {
// ...
}
@end

可能有更好的方法来实现你想要的,但这是我在没有更多信息的情况下能做的最好的事情。

关于iphone - 如何调用另一个类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3235742/

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