【发布时间】:2018-02-22 00:20:09
【问题描述】:
我有一个自定义 UITableViewCell xib,上面有两个按钮。一个编辑按钮,旨在将该单元格的信息传递到新的视图控制器中,这是我目前遇到的问题。我在自定义单元格中为 TableViewController 创建了一个属性,并将按钮连接到此代码:
-(IBAction) editItem {
self.itemsList = [[TheItemsList alloc] init];
[self.itemsList editItem];
NSLog(@"EDIT");
}
在 TheItemsList 里面我有这个代码:
-(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
#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
#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
#import <UIKit/UIKit.h>
#import "ItemCell.h"
@class ItemCell;
@protocol ItemCellDelegate;
@interface TheItemsList : UITableViewController <ItemCellDelegate>
.m
-(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,按下按钮时tableview中的第一项不做任何事情。
2,其他行将运行代码,但它只对第一行的数据执行。
【问题讨论】:
-
Edititem 是在 uitableviewcell 类还是 tableviewcontroller 类中?
-
新创建的
TheItemsList实例没有导航控制器。您的单元格不应推送视图控制器。它应该可以在您的表视图控制器上使用一个委托方法,该方法可以推送一个新的视图控制器 -
@Paulw11 好的,那么我将如何去做,以便在按下编辑按钮时它可以推动视图控制器? IBAction editItem 在单元格上,(void)editItem 在 tableviewcontroller 上
-
正如我所说,在您的单元格和视图控制器之间使用委托模式。
-
@Paulw11 检查 OP 更新以了解它是如何部分工作的,但不确定我做错了什么
标签: ios uitableview uibutton delegates