2013-11-03 30 views
0

我有一個嵌入在標準視圖控制器中的tableview。 tableview有一個我想要顯示的工具欄。如何顯示嵌入視圖的工具欄?

目前,工具欄仍未顯示。

這是我曾嘗試:

  • 設置工具欄上的嵌入式表視圖(代碼+故事板)來顯示。
  • 將工具欄設置爲在父視圖控制器(代碼+故事板)中顯示。
  • 設置爲工具欄不顯示在視圖控制器中,而是顯示在嵌入的表格(代碼+故事板)中。

如果我直接訪問表而不是通過嵌入視圖,工具欄就會出現(並正確顯示)。嵌入視圖的操作是否會刪除工具欄?

如何在嵌入視圖中顯示tableviews工具欄?

編輯:新代碼

ParentViewController.h

#import <UIKit/UIKit.h> 
#import <MessageUI/MessageUI.h> 
#import "childTable.h" 

@interface ParentViewController : UIViewController <MFMailComposeViewControllerDelegate, UpdateParentProtocol> 

@property (weak, nonatomic) IBOutlet UIBarButtonItem *emailButton; 
@property (weak, nonatomic) NSString *buttonEnabled; 
@property (weak, nonatomic) ChildTable *childTableVC; 

@end 

parentViewController.m 

#import "ParentViewController.h" 

@interface ParentViewController() <MFMailComposeViewControllerDelegate> 

@end 

@implementation ParentViewController 

@synthesize emailButton; 
@synthesize buttonEnabled; 
@synthesize childTableVC; 

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

[self.childTableVC setDelegate:self]; 

} 


-(void) isButtonEnabled:(NSString *)enabledX { 

    NSLog(@"isButtonEnabled"); 

    enabledX = buttonEnabled; 

if ([buttonEnabled isEqualToString:@"FALSE"]) 
{ 

    emailButton.enabled = FALSE; 


} 
else 
{ 
    emailButton.enabled = TRUE; 

} 
} 

childTable.h 

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 

@protocol UpdateParentProtocol <NSObject> 

@required 
-(void) isButtonEnabled: (NSString *) enabledX; 

@end 

@interface childTable: UITableViewController { 

    id <UpdateParentProtocol> delegate; 

} 

//@property (weak, nonatomic) IBOutlet UIBarButtonItem *emailButton; 

@property (strong, nonatomic) NSString *enabledX; 

@property (strong, nonatomic) id <UpdateParentProtocol> delegate; 

childTable.m 

-(void) tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath { 

NSLog(@"TableEditingEnded"); 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

self.myArray = [defaults mutableArrayValueForKey:@"favourite_views_key"]; 

if (myArray == 0) { 

    enabledX = @"FALSE"; 
    NSLog(@"PASSEDFALSE"); 

    [[self delegate] isButtonEnabled:enabledX]; } 

else { 

    enabledX = @"TRUE"; 
    NSLog(@"PASSEDTRUE"); 

    [[self delegate] isButtonEnabled:enabledX]; } 

} 

當我運行代碼時,我得到一個NSLog打印出TableEditingEnded和PASSEDTRUE,但沒有isButtonEnabled。這表明 - (void)isButtonEnabled:(NSString *)enabledX沒有被調用。你能建議爲什麼嗎?

回答

1

這裏是如何從兒童使用的協議

@protocol UpdateParentProtocol <NSObject> 

-(void)doSomething1; 
-(void)doSomething2; 

@end 

@interface ParentViewController : UIViewController<UpdateParentProtocol> 

@end 

@implementation ParentViewController 
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    TableViewController *tableViewController = segue.destinationViewController; 
    tableViewController.delegate = self; 
} 

-(void)doSomething1 
{ 
    NSLog(@"doSomething1"); 
} 

-(void)doSomething2 
{ 
    NSLog(@"doSomething2"); 
} 

@end 
---- 

#import "ParentViewController.h" 

@interface TableViewController : UITableViewController 

@property(strong, nonatomic) id<UpdateParentProtocol> delegate; 

@end 

@implementation TableViewController 


-(void)updateParentWithData 
{ 
    if([self.delegate respondsToSelector:@selector(doSomething1)]) 
    { 
     [self.delegate performSelector:@selector(doSomething1)]; 
    } 
} 
+0

感謝您的輸入約拿傳達給父視圖控制器,但我很容易地實現對我的表視圖工具欄。表格視圖上的工具欄有一個與表格中項目數量相關的按鈕,當數字達到零時,按鈕變爲不可用(以避免崩潰)。我最初嘗試將工具欄放在父視圖控制器中,但每當計數達到零令人討厭地複雜時發現將數據從子項傳遞給父項。也許如果你不能提供關於在子視圖中顯示工具欄的任何建議,你可以提供一些關於如何將數據從孩子傳遞給父母的信息? –

+0

您可以通過許多不同的方式在視圖控制器之間傳遞數據。 1)您可以在父視圖控制器中創建工具欄,然後通過屬性傳遞對您的表視圖控制器的引用2)您可以使用塊3)您可以使用代表。 – JonahGabriel

+0

感謝您的評論;我目前的數據傳輸方法(用於傳遞數據)使用1,但是我使用segues來實際執行數據傳輸過程。由於在用戶編輯子表時激活的segue(因此意味着該按鈕應該變灰),您會如何建議我在這種情況下實際將數據傳遞給父級? –