2014-12-09 25 views
-1

基本上,我有UITableView自定義單元佈局。我按照AppCoda.com上的教程(http://www.appcoda.com/customize-table-view-cells-for-uitableview/)瞭解如何製作它們。如何使tableview單元格爲靜態並仍然可以訪問?

現在,我創建了一個prepareForSegue方法,它在輕敲UITableView中的單元格時打開集合視圖。由於這樣做我的UITableView單元格是空白的,沒有我分配給他們的信息。此外,UITableView中的所有單元顯示相同的數據。

如何創建這兩者之間的連接,使其處於完美狀態時,集合中的第一張圖片將用作表格單元格中的示例圖像,並且所有表格單元格都有單獨的數據?

FolderTableViewController.m

@implementation FoldersTableViewController 
{ 
    NSArray *folders; 

    } 
    @synthesize tableView;  

    - (void)viewDidLoad { 
    [super viewDidLoad]; 

    Folder *folder1 = [Folder new]; 
    folder1.name = @"Barcelona"; 
    folder1.date = @"01/12/2014"; 
    folder1.imageFile = @"city23.gif"; 

    Folder *folder2 = [Folder new]; 
    folder2.name = @"Florence"; 
    folder2.date = @"02/12/2014"; 
    folder2.imageFile = @"city24.gif"; 

    Folder *folder3 = [Folder new]; 
    folder3.name = @"Berlin"; 
    folder3.date = @"03/12/2014"; 
    folder3.imageFile = @"city25.gif"; 

    Folder *folder4 = [Folder new]; 
    folder4.name = @"Swansea"; 
    folder4.date = @"04/12/2014"; 
    folder4.imageFile = @"city26.gif"; 

    Folder *folder5 = [Folder new]; 
    folder5.name = @"Cardiff"; 
    folder5.date = @"05/12/2014"; 
    folder5.imageFile = @"city29.gif"; 

    Folder *folder6 = [Folder new]; 
    folder6.name = @"Pisa"; 
    folder6.date = @"06/12/2014"; 
    folder6.imageFile = @"city30.gif"; 

    Folder *folder7 = [Folder new]; 
    folder7.name = @"Lisbon"; 
    folder7.date = @"07/12/2014"; 
    folder7.imageFile = @"city31.gif"; 

    Folder *folder8 = [Folder new]; 
    folder8.name = @"Liverpool"; 
    folder8.date = @"08/12/2014"; 
    folder8.imageFile = @"city32.gif"; 

    Folder *folder9 = [Folder new]; 
    folder9.name = @"Mannheim"; 
    folder9.date = @"09/12/2014"; 
    folder9.imageFile = @"city33.gif"; 

    folders = [NSArray arrayWithObjects:folder1, folder2, folder3, folder4, folder5, folder6, folder7, folder8, folder9, nil]; 

} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     return [searchResults count]; 
    } else { 
     return [folders count]; 

    } 
    // Return the number of rows in the section. 
    return [folders count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    static NSString *foldersIdentifier = @"FolderCell"; 

    FolderCellTableViewCell *cell = (FolderCellTableViewCell *) [tableView dequeueReusableCellWithIdentifier:foldersIdentifier]; 

    if (cell == nil) 
    { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FolderCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 

    } 

    Folder *folder = [folders objectAtIndex:indexPath.row]; 
    cell.nameLabel.text = folder.name; 
    cell.thumbnailImageView.image = [UIImage imageNamed:folder.imageFile]; 
    cell.datumLabel.text = folder.date; 

    return cell; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
if([segue.identifier isEqualToString:@"showFolderCollection"]) { 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];} 
} 

FolderCollectionViewController.h

@property (strong, nonatomic) NSArray *photoImages; 

FolderCollectionViewController.m

@synthesize photoImages; 

static NSString * const reuseIdentifier = @"Cell"; 

- (void)viewDidLoad { 
[super viewDidLoad]; 

self.photoImages = [NSArray arrayWithObjects:@"city23.gif", @"city24.gif", @"city25.gif", @"city26.gif", @"city29.gif", nil]; 

Folder.h:

@property (nonatomic, strong) NSString *name; 
@property (nonatomic, strong) NSString *date; 
@property (nonatomic, strong) NSString *imageFile; 

Folder.m:

@synthesize name; 
@synthesize date; 
@synthesize imageFile; 

我的自定義的TableCell:

⎮⌈UI⌉名稱⎮

⎮⌊Image⌋日期⎮

這是我表一個大致的輪廓細胞。我無法發佈圖片。

對於任何不準確和錯誤的解釋提前道歉,我剛開始學習如何編程,因此我幾乎沒有知道它。

+0

你在哪裏設置你的數據源指針? – 2014-12-09 12:54:27

+0

根據您的解釋,您似乎希望在表格視圖的每個單元格中顯示集合視圖的第一個圖像,並單擊需要在其他視圖控制器的集合視圖中顯示所有圖像的單元格。但是在您的文件夾模型中,只有一個圖像顯示在單元格中,其他圖像與該文件夾相關的位置。 – 2014-12-09 13:07:21

+0

@HotLicks我不知道你是否意味着這樣的: 接口FoldersTableViewController:的UITableViewController <的UITableViewDelegate,UITableViewDataSource> 接口FolderCollectionViewController:UICollectionViewController F90530 2014-12-09 13:18:00

回答

0

首先,我懷疑這是因爲你的TableView不允許選擇。因此,[tableView indexPathForSelectedRow]可能會返回nil。檢查以確保它恢復您的預期。如果還沒有,請從UITableViewCell中刪除segue,並從FolderTableViewController - > FolderCollectionViewController創建一個。然後,在的UITableViewDelegate實現:

​​

其次,閱讀您的意見後,這是我怎麼會設置你的賽格瑞方法準備:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if([segue.identifier isEqualToString:@"showFolderCollection"]) { 
     NSIndexPath *indexPath = [sender isKindOfClass:[NSIndexPath class] ? sender : [self.tableView indexPathForSelectedRow]; 
     Folder *selectedFolder = self.folders[indexPath.row]; 
     FolderCollectionViewController *fcvc = (FolderCollectionViewController *)segue.destinationViewController; 
     [fcvc loadFolder:selectedFolder]; 
    } 
} 

注意,在FolderCollectionViewControllerprepareForSegue被調用後viewDidLoad和前viewWillAppear

  1. FoldersTableViewController:用戶觸摸行
  2. 蘋果斷定哪些抽頭行/ Segue公司應該做
  3. FolderCollectionViewController:viewDidLoad
  4. FoldersTableViewController:prepareForSegue
  5. FolderCollectionViewController:viewWillAppear:

所以不依賴於folderviewDidLoad方法在那裏爲FolderCollectionViewController。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // don't load your data here. 
} 

相反,創建這樣的方法:

-(void) loadFolder:(Folder*)folder { 
    self.folder = folder; 
    self.photoImages = [folder loadAllImages]; // or whatever 
    [self.collectionView reloadData]; // put this here or in -viewWillAppear: 
} 

在問候的文件夾類,我把它定義如下所示:

@interface Folder : NSObject 

+(instanceType) folderWithName:(NSString*)name date:(NSDate*)date andImagePaths:(NSArray*)imagePaths; 

@property (nonatomic) NSString *name; 
@property (nonatomic) NSDate *date; 
@property (nonatomic) NSArray *imagePaths; 
@property (nonatomic, readonly) NSString *thumbPath; // use this for the UITableView Image 

@end 

@implementation Folder 

+(instanceType) folderWithName:(NSString*)name date:(NSDate*)date andImagePaths:(NSArray*)imagePaths; { 
    Folder *folder = [Folder new]; 
    folder.name = name; 
    folder.date = date; 
    folder.imagePaths = imagePaths; 
} 

- (NSString*) thumbPath { 
    if (self.imagePaths != nil && 
     self.imagePaths.count > 0) { 
     return [self.imagePaths firstObject]; 
    } else { 
     return nil; 
    } 
} 

@end 
+0

感謝您的幫助!不幸的是,它似乎不適合我。也許這是我的實施方式,這是錯誤的。不過謝謝! – F90530 2014-12-09 16:34:20

相關問題