从TableView的细节视图,解析

时间:2014-03-21 18:14:44

标签: objective-c uitableview parse-platform detailsview

有人可以帮助我吗,我到处寻找这个想法,到目前为止没有任何工作。我需要从table view to detail view传递一些数据并将其粘贴到labelsUiimage

数据表视图来自我创建的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

1 个答案:

答案 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"];