0

標準のView Controllerに埋め込まれたテーブルビューがあります。テーブルビューには、表示したいツールバーがあります。

現在、ツールバーは非表示のままです。

これは私が試しました:

  • ツールバーを埋め込みテーブル ビュー (コード + ストーリーボード) に表示するように設定します。
  • 親View Controller(コード+ストーリーボード)に表示するようにツールバーを設定します。
  • ビュー コントローラーには表示されず、埋め込みテーブル (コード + ストーリーボード) に表示されるようにツールバーに設定します。

埋め込みビュー経由ではなくテーブルに直接アクセスすると、ツールバーが表示されます (正しく表示されます)。ビューを埋め込むアクションによってツールバーが削除されますか?

埋め込みビューに 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];  }

}

コードを実行すると、TableEditingEnded と PASSEDTRUE から NSLog が出力されますが、isButtonEnabled は出力されません。これは、 -(void) isButtonEnabled:(NSString *)enabledX が呼び出されていないことを示唆しています。理由を教えてください。

4

1 に答える 1

1

プロトコルを使用して子から親のView Controllerに通信する方法は次のとおりです

@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)];
    }
}
于 2013-11-03T21:39:54.340 に答える