Code is exectuting but the view is not loading when called form a function?

不想你离开。 提交于 2019-11-27 04:48:45

问题


I am doing a book kinda application using a viewBased application. The mainView acts as the backgroundView for loading pages. Each page is a different view and have its own nib. When i swipe on a page(actually on the mainView which have loaded the current view/page), that page will be removed and the next/previous page will be added.

[currentPage.view removeFromSuperview];
[self.view insertSubview:nextPage.view atIndex:0];

I have added a popoverController with a barbutton in this mainView. Its intialized with a tableviewController class named popClass. PopClass is another UITableViewController class which will act as the parent for the popViewController.

self.myPopController = [[PopController alloc] initWithStyle:UITableViewStylePlain];
self.myPopOverController = [[UIPopoverController alloc] initWithContentViewController:myPopController];

When I select certain row in the popover, I want the backgroundview(mainView) to load the page corresponding to the number of the row.

For that I have written a function in bookView(mainView) Controller class. And is calling it from the popOver's parent class when i select certain row.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger toPageNumber = indexPath.row + 1;
[viewController changeToPage:toPageNumber];
}

Function and the lines of code are executing but nothing is happening. Even the log lines are printed but no action takes place. The code is the same for removing a page and adding another page which is working successfully when i swipe the view/page.

What is the problem? OR is there anyother way to make the view change in mainView by using the popover?


回答1:


You need to have refernce of the background view controller in the popover controller.

In the PopController controller you should have a delagate like:

@interface PopController: UITablViewController{

  //// other varibales;
      id delegate;
}

@property (nonatomic, retain) id delgate;

Now from the class in which you are showing the popovercontroller

you should add this line:

[myPopController setDelegate:self];

Then you can easily acces any method of the main view controller class. By using

[delegate callTheRequiredMethod];

Hope this helps.

Thanks,

Madhup




回答2:


It's hard to tell what's going wrong without looking at the code. That said, here's what I'd do:

(1) When a row is selected in mainView, present the popoverController modally:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    PopoverViewController *vc = [[PopoverViewController alloc] init];
    [self.navigationController presentModalViewController:vc animated:YES];        
    [vc release];
}

(2) When something changes in the popoverController, for example a row is selected, set a value in the parentViewController (which should be the MainView):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.parentViewController.value = someValue;
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

(3) Dismiss the popoverController where-ever you choose by calling:

[self dismissModalViewControllerAnimated:YES]`


来源:https://stackoverflow.com/questions/2720327/code-is-exectuting-but-the-view-is-not-loading-when-called-form-a-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!