有人可以帮助我吗,我到处寻找这个想法,到目前为止没有任何工作。我需要从table view to detail view
传递一些数据并将其粘贴到labels
和Uiimage
。
数据表视图来自我创建的Parse数据库,似乎可以很好地进入Tableview,但我想使用tableview用来填充详细信息视图的same array
。
我使用解析后的2列来填写此tableview标题和sub,以及另外两列填写标签和图像。到目前为止,这是我的代码。我在DetailView
中的代码中使用了一堆变量.h
#import <UIKit/UIKit.h>
#import <Parse/Parse.h>
@interface BooksTableViewController : UITableViewController <UITableViewDelegate,NSObject >
{
NSArray * Booksarray;
}
@property (strong, nonatomic) IBOutlet UITableView *bookstableview;
@end
.m
#import "BooksTableViewController.h"
#import "BookDetailViewController.h"
@interface BooksTableViewController ()
@end
@implementation BooksTableViewController
@synthesize bookstableview;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(RetrieveDatafromParse)];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
-(void) RetrieveDatafromParse {
PFQuery * getbooks = [PFQuery queryWithClassName:@"BooksTableView"];
[getbooks findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error) {
Booksarray =[[NSArray alloc] initWithArray: objects];
}
[bookstableview reloadData];
NSLog(@"%@",objects);
}];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return Booksarray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * CellIdentifier = @"Cell";
UITableViewCell * cell = [bookstableview dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell ==nil) {
cell = [[ UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}
PFObject * tempObject = [Booksarray objectAtIndex:indexPath.row];
cell.textLabel.text = [tempObject objectForKey:@"Books"];
cell.detailTextLabel.text= [tempObject objectForKey:@"Code"];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
BookDetailViewController * detailVC=[[BookDetailViewController alloc] initWithNibName:@"BookDetailViewController" bundle:nil];
detailVC.BookImage.image=[Booksarray objectAtIndex:indexPath.row];
detailVC.bookDesc.text=[Booksarray objectAtIndex:indexPath.row];
detailVC.bookTitle.text=[Booksarray objectAtIndex:indexPath.row];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.destinationViewController isKindOfClass: [BookDetailViewController class]]) {
BookDetailViewController *destination = segue.destinationViewController;
SEL selector = NSSelectorFromString(@"SetFile:");
if ([destination respondsToSelector:selector]) {
NSIndexPath *indexPath = [self.bookstableview indexPathForCell:sender];
PFObject * object = [Booksarray objectAtIndex:indexPath.row];
PFFile *file = [object objectForKey:@"BooksTableView"];
[destination setValue:file forKey:@"file"];
}
}
}
@end
.h
#import <UIKit/UIKit.h>
#import <Parse/Parse.h>
@interface BookDetailViewController : UIViewController <NSObject> {
}
@property (weak, nonatomic) IBOutlet UIImageView *BookImage;
@property (weak, nonatomic) IBOutlet UILabel *bookTitle;
@property (weak, nonatomic) IBOutlet UILabel *bookDesc;
@property (weak,nonatomic)PFFile *file;
@end
.m
#import "BookDetailViewController.h"
#import "BooksTableViewController.h"
@interface BookDetailViewController ()
@implementation BookDetailViewController
@synthesize BookImage,bookTitle,bookDesc,file,bookInfo,Picture,object2;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(RetrieveObjectsFromParse)];
self.bookTitle.text = [self.file objectForKey:@"Books"];
self.BookImage.image = [self.file objectForKey:@"BookImage"];
self.bookDesc.text =[self.file objectForKey:@"BookDetails"];
}
-(void)RetrieveObjectsFromParse {
PFQuery * GetObjects = [PFQuery queryWithClassName:@"BooksTableView"];
[GetObjects findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error) {
details =[[NSArray alloc] initWithArray: objects];
};
NSLog(@"%@",objects);
}];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
答案 0 :(得分:0)
试试这个:
#1 从控制器到控制器创建一个segue:
#2 为您的segue提供身份证明detailSegue
。
#3 在didSelectRowAtIndexPath
中执行segue:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"detailSegue" sender:sender];
}
#4 实施segue委托:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if([segue.identifier isEqualToString:@"detailSegue"]){
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
BookDetailViewController *detailVC = (BookDetailViewController *)segue.destinationViewController;
detailVC.bookDesc.text=[Booksarray objectAtIndex:indexPath.row];
//I uncommented that because it looks like a typo, same value 3 times?
//detailVC.BookImage.image=[Booksarray objectAtIndex:indexPath.row];
//detailVC.bookTitle.text=[Booksarray objectAtIndex:indexPath.row];
}
}
如果这是您得到的日志:
2014-03-21 15:06:20.151 BookStore [25539:90b] BookIndex = {BookDetails =“测试 test“; BookImage =”“; Books = Languages; Code = 104; }
然后你需要这样做:
detailVC.bookTitle.text=[[Booksarray objectAtIndex:indexPath.row]objectForKey:@"Books"];
detailVC.bookDesc.text= [[Booksarray objectAtIndex:indexPath.row]objectForKey:@"BookDetails"];
detailVC.BookImage.image=[[Booksarray objectAtIndex:indexPath.row]objectForKey:@"BookImage"];
或者缩短时间:
NSArray *bookAtIndex = [Booksarray objectAtIndex:indexPath.row];
detailVC.bookTitle.text=[bookAtIndex objectForKey:@"Books"];
detailVC.bookDesc.text= [bookAtIndex objectForKey:@"BookDetails"];
detailVC.BookImage.image=[bookAtIndex objectForKey:@"BookImage"];
甚至更短
NSArray *bookAtIndex = Booksarray[indexPath.row];
detailVC.bookTitle.text= bookAtIndex[@"Books"];
detailVC.bookDesc.text= bookAtIndex[@"BookDetails"];
detailVC.BookImage.image= bookAtIndex[@"BookImage"];