gpt4 book ai didi

ios - UIViewController 可能不响应 showRootPopoverButtonItem

转载 作者:行者123 更新时间:2023-11-28 23:06:34 25 4
gpt4 key购买 nike

我正在使用 Apple 的 MuiltipleDetailViewController 示例应用程序并收到消息“UIViewController 可能不会响应 showRootPopoverButtonItem”

这在 XCode 3.X 中有效,但我在 4.2 中收到消息

应用程序本身功能 100%,每个 Nib 都可以识别弹出窗口,横向模式下左侧的表格也是如此。但是我不能提交这个警告。我需要更改什么??

RootViewController.h

#import <UIKit/UIKit.h>


/*
SubstitutableDetailViewController defines the protocol that detail view controllers must adopt. The protocol specifies methods to hide and show the bar button item controlling the popover.

*/
@protocol SubstitutableDetailViewController <NSObject>
- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
@end


@interface RootViewController : UITableViewController <UISplitViewControllerDelegate> {

UISplitViewController *splitViewController;

UIPopoverController *popoverController;
UIBarButtonItem *rootPopoverButtonItem;

//UINavigationBar *navigationBar;
}

@property (nonatomic, assign) IBOutlet UISplitViewController *splitViewController;

@property (nonatomic, retain) UIPopoverController *popoverController;
@property (nonatomic, retain) UIBarButtonItem *rootPopoverButtonItem;


//@property (nonatomic, retain) IBOutlet UINavigationBar *navigationBar;

@end

RootViewController.m:

#import "RootViewController.h"
#import "WebViewController.h"
#import "Twitter.h"
//#import "SubstitutableDetailViewController.h"



@implementation RootViewController

@synthesize splitViewController, popoverController, rootPopoverButtonItem;//, navigationBar;


#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {

[super viewDidLoad];
// Set the content size for the popover: there are just two rows in the table view, so set to rowHeight*2.
self.contentSizeForViewInPopover = CGSizeMake(310.0, self.tableView.rowHeight*2.0);
//self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:255/255 green:104/255 blue:1/255 alpha:1];
}
/*
-(void)customizeAppearance {
//create resizable images
UIImage *bluImage = [UIImage imageNamed:@"blu.jpg"];// resizableImageWithCapInsets:(0, 0, 0, 0)];

//set the bg for *all* UINavBars
[[UINavigationBar appearance] setBackgroundImage:bluImage forBarMetrics:UIBarMetricsDefault];
}
*/

-(void) viewDidUnload {
[super viewDidUnload];

self.splitViewController = nil;
self.rootPopoverButtonItem = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}


- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc {

// Keep references to the popover controller and the popover button, and tell the detail view controller to show the button.
barButtonItem.title = @"Index";
self.popoverController = pc;
self.rootPopoverButtonItem = barButtonItem;
UIViewController <SubstitutableDetailViewController> *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
[detailViewController showRootPopoverButtonItem:rootPopoverButtonItem];
}


- (void)splitViewController:(UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {

// Nil out references to the popover controller and the popover button, and tell the detail view controller to hide the button.
UIViewController <SubstitutableDetailViewController> *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
[detailViewController invalidateRootPopoverButtonItem:rootPopoverButtonItem];
self.popoverController = nil;
self.rootPopoverButtonItem = nil;
}


#pragma mark -
#pragma mark Table view data source

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

// Two sections, one for each detail view controller.
return 2;
}


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

static NSString *CellIdentifier = @"RootViewControllerCellIdentifier";

// Dequeue or create a cell of the appropriate type.
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

// Set appropriate labels for the cells.
if (indexPath.row == 0) {
cell.textLabel.text = @"Twitter";
}

else if (indexPath.row == 1) {
cell.textLabel.text = @"Contact Us";
}


cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.backgroundColor = [UIColor blackColor];
cell.contentView.backgroundColor = [UIColor blackColor];
cell.detailTextLabel.backgroundColor = [UIColor blackColor];
return cell;
}


#pragma mark -
#pragma mark Table view selection

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

/*
Create and configure a new detail view controller appropriate for the selection.
*/
NSUInteger row = indexPath.row;

UIViewController *detailViewController = nil;

if (row == 0) {
Twitter *newDetailViewController = [[Twitter alloc]
initWithNibName:@"Twitter"
bundle:nil];
detailViewController = newDetailViewController;
}

if (row == 1) {
WebViewController *newDetailViewController = [[WebViewController alloc]
initWithNibName:@"WebViewController"
bundle:nil];
newDetailViewController.detailURL=
[[NSURL alloc] initWithString:@"http://www.chipmunkmobile.com/contact.html"];

detailViewController = newDetailViewController;
}

// Update the split view controller's view controllers array.
NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
splitViewController.viewControllers = viewControllers;
[viewControllers release];

// Dismiss the popover if it's present.
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}

// Configure the new view controller's popover button (after the view has been displayed and its toolbar/navigation bar has been created).
if (rootPopoverButtonItem != nil) {
[detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];
}


[detailViewController release];
}

#pragma mark -
#pragma mark Managing the popover


/*
- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
// Add the popover button to the left navigation item.
[navigationBar.topItem setLeftBarButtonItem:barButtonItem animated:NO];
}


- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
// Remove the popover button.
[navigationBar.topItem setLeftBarButtonItem:nil animated:NO];
}
*/

#pragma mark -
#pragma mark Memory management

- (void)dealloc {
[popoverController release];
[rootPopoverButtonItem release];
[super dealloc];
}

@end

这是我收到警告的确切行的图像 enter image description here

最佳答案

您收到此警告的原因是因为此 UIViewController *detailViewController UIViewController 没有名为“showRootPopoverButtonItem”的方法。如果你想摆脱警告,只需这样做:

[(WebViewController*)detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];

[(Twitter*)detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];

您只需要让它知道它实际上不仅仅是一个 viewController,它是您创建的子类 viewController。因此,无论 showRootPopoverButtonItem: 类是什么,您只需要对其进行类型转换。

关于ios - UIViewController 可能不响应 showRootPopoverButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com