首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从其他类调用方法时,iOS代码不运行

从其他类调用方法时,iOS代码不运行
EN

Stack Overflow用户
提问于 2018-02-22 08:20:10
回答 2查看 101关注 0票数 1

我有一个定制的UITableViewCell xib,上面有两个按钮。一个编辑按钮,旨在将该单元格的信息传递到一个新的视图控制器中,这就是我目前遇到的问题。我在自定义单元格中为TableViewController创建了一个属性,并将按钮连接到以下代码:

代码语言:javascript
复制
-(IBAction) editItem {
    self.itemsList = [[TheItemsList alloc] init];
    [self.itemsList editItem];
    NSLog(@"EDIT");
}

在TheItemsList中,我有这样的代码:

代码语言:javascript
复制
-(void)editItem {
    NSLog(@"EDITAGAIN");
    EditItem *detailViewController = [[EditItem alloc] initWithNibName:@"EditItem" bundle:nil];
    detailViewController.selectedCountry = self.selectedCountry;
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    detailViewController.therow = indexPath.row;
    //Pass the selected object to the new view controller.
    
    // Push the view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];
}

控制台打印每个方法的NSLog,但视图不推送。这段代码以前是在表视图的didSelectForIndexPath部分中使用的,所以我知道它推送的视图控制器是正常的,我只是不知道这里发生了什么。

更新:

我让它在某种程度上起作用了,重点是有点。

ItemCell.h

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import "TheItemsList.h"
@class TheItemsList;
@class ItemCell;
@protocol ItemCellDelegate <NSObject>
@required
-(void)editTheItem:(ItemCell *)theCell;
@end

@interface ItemCell : UITableViewCell
@property (assign) id <ItemCellDelegate> delegate;

@property (nonatomic, retain) IBOutlet UILabel *itemName;
@property (nonatomic, retain) IBOutlet UILabel *itemPrice;
@property (nonatomic, retain) IBOutlet UILabel *itemAisle;
@property (nonatomic, retain) IBOutlet UIImageView *thumbnail;
@property (nonatomic, retain) TheItemsList *itemsList;



@end

.m

代码语言:javascript
复制
#import "ItemCell.h"
#import "EditItem.h"
@implementation ItemCell
@synthesize itemName = _itemName;
@synthesize itemAisle = _itemAisle;
@synthesize itemPrice = _itemPrice;
@synthesize thumbnail = _thumbnail;
@synthesize itemsList, delegate;
- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}
-(IBAction) editItem {
    [self.delegate editTheItem:self];
}


@end

现在,在TableView中

.h

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import "ItemCell.h"
@class ItemCell;
@protocol ItemCellDelegate;
@interface TheItemsList : UITableViewController <ItemCellDelegate>

.m

代码语言:javascript
复制
-(void)editTheItem:(ItemCell *)theCell {
    NSLog(@"EDITAGAIN");
    EditItem *detailViewController = [[EditItem alloc] initWithNibName:@"EditItem" bundle:nil];
    detailViewController.selectedCountry = self.selectedCountry;
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    detailViewController.therow = indexPath.row;
    //Pass the selected object to the new view controller.
    
    // Push the view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];
}

我遇到的是两个问题。

1,当按钮被按下时,表视图中的第一项不执行任何操作。

2,其他行将运行代码,但它只对第一行的数据执行此操作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-22 10:32:47

您应该在UITableViewCell中使用委托模式来委托按钮,按回包含使用单元格的UITableView的UIViewController。

在cellForRowAt:IndexPath中,您可以检索单元格并设置它的委托,如cell.delegate = self。在视图控制器中,实现委托并处理操作。

在单元格中设置一个委托变量(var委托: MyCellDelegate?)在editItem函数中,可以调用self.delegate?.editItem()这样的委托

票数 1
EN

Stack Overflow用户

发布于 2018-02-24 23:11:22

你的问题基本上是因为这一行

代码语言:javascript
复制
 NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

单击单元格上的按钮时,它不一定选择行。这个按钮需要触摸。解决这个问题的一种方法是找到按钮所在单元格的NSIndexPath,然后使用它执行操作。一种方法是使用从editAction委托提供的单元格引用

代码语言:javascript
复制
-(void)editTheItem:(ItemCell *)theCell

[self.tableView indexPathForCell:theCell]替换[self.tableView indexPathForSelectedRow]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48917685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档