我有两个viewcontrollers,两个都有tableview。第一个viewcontroller有一个图像,每行有一个标题,而另一个有空行。我想要的是能够复制第一个视图控制器中所选行的内容,并将它们粘贴到第二个视图控制器的空行中。
这是.m文件:
#import "SimpleTableViewController.h"
@interface SimpleTableViewController ()
@end
@implementation SimpleTableViewController
{
NSArray *list;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
list = [NSArray arrayWithObjects:@"Pic 1", @"Pic 2", @"Pic 3", @"Pic 4", @"Pic 5", nil];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [list count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIndentifier= @"simpleTableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIndentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIndentifier];
}
cell.textLabel.text = [list objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:@"image.jpg"];
return cell;
}
@end
我是UITableView的新手,所以我这样做是为了学习目的。
谢谢
答案 0 :(得分:1)
我要做的是创建一个新的NSMutableArray,用于存储所选单元格的值,然后将该数组作为其数据源传递给新表。
像这样:
@implementation SimpleTableViewController
{
NSArray *list;
NSMutableNArray *selectedCells; // store the selected cells here
}
- (void)viewDidLoad
{
// .... your code here
// initialize your selected cells array
selectedCells = [[NSMutableArray alloc] init];
}
现在使用didSelectRowAtIndexPath
方法,您可以通过UITableViewDelegate
获取所选的行数据:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSString *cellText = cell.textLabel.text;
UIImage *imageView = cell.imageView.image;
// Now add whatever you want to your selectedCells array now
// that you have a reference to the selected cell.
}
通过这样的简单设置,您现在可以将selectedCells
数组作为数据源传递给新的tableView。
希望这会有所帮助。我没有测试过代码,所以它只是指向正确的方向。
答案 1 :(得分:1)
你可以得到如下所选的行: -
//First TableViewController
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
secondTableViewObj = [[SecondTableView alloc]initWithNibName:@"SecondTableView" bundle:nil];
secondTableViewObj.dict = [NSDictionary dictionaryWithObjectsAndKeys:@"test",@"title",@"test2",@"detail", nil];
secondTableViewObj.pass_img = [UIImage imageNamed:@"Icon"];
//Alternative of this would be to use segue and do all passing of object's in prepareForSegue method but don't forget to put identifier.
[self.navigationController pushViewController:next animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
//Second TableViewController
In SecondTableView.h file
#import <UIKit/UIKit.h>
@interface NewViewController : UIViewController
@property (assign) UIImage *pass_img;
@property (nonatomic, retain) NSDictionary *dict;
@end
In SecondTableViewCon.m file
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identtifier =@"yourCellIndentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identtifier];
if(cell==nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identtifier];
}
//You need to provide tag value to your component in your xib/storyboard and set them with value's as below.
UILabel *cellTitleLabel = (UILabel *)[cell viewWithTag:0];
UILabel *cellDetailLabel = (UILabel *)[cell viewWithTag:1];
UIImage *cellImg = (UIImage *)[cell viewWithTag:2];
cellTitleLabel.text = [dict objectForKey:@"title"];
cellDetailLabel.text = [dict objectForKey:@"detail"];
cellImg = img;
return cell;
}
其他任何事情都让我知道。
答案 2 :(得分:0)
首先,这是您可能想要的答案:
使用indexPathsForSelectedRows
。在您从复制的视图控制器中,您必须实现cellForRowAtIndexPath
,因此indexPathsForSelectedRows
在某种程度上可以成为“反向”的一部分。如果您知道索引路径与数据集的某个成员是1:1(并且您很有可能),那么调用indexPathsForSelectedRows
可以通过获取索引路径并查找关联数据来获取所需的数据成员。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.textLabel.text = ((MyClass *)self.myDataSet[indexPath.row]).someTextProperty;
...
}
- (void)copyRowsToTableViewB {
for (NSIndexPath path in self.indexPathsForSelectedRows) {
// Add to table B's datasource and re render
[tableBDataSource.someMutableArrayMaybe addObject:self.myDataSet[indexPath.row]
}
}
现在,复制数据而不是视图内容会更好更容易。例如,创建一个SimpleTableViewDataSourceAndDelegate
来实现委托&amp;给定适当的服务/ ORM /任何依赖的数据源协议。
@interface SimpleTableViewDataSourceAndDelegate : NSObject<UITableViewDelegate, UITableViewDataSource>
...
@interface UIViewControllerA : UIViewController<UITableViewDelegate, UITableViewDataSource>
- (id) initWithBaseDelegate:(NSOjbect<UITableViewDelegate> *) baseDelegate dataSource:(NSObject<UITableViewDataSource> *)baseDataSource
这将允许他们在填充数据源时共享被引用的同一对象。