доступ к экземпляру представления из другого класса? - PullRequest
0 голосов
/ 22 июня 2011

Я давно пытаюсь это сделать. вот что я делаю

firstviewcontroller
.h

iPhoneStreamingPlayerViewcontroller *viewController; 
@property(nonatomic,retain)iPhoneStreamingPlayerViewController *viewController;

.m
в didselectrowatindexpath

    BooksNavController *bks  = [[BooksNavController alloc]init];


    bookDetailViewController.title = [NSString stringWithFormat:@"%@",[booksArray objectAtIndex:rowSelected]];  
    NSString *ti = [NSString stringWithFormat:@"%@",[booksArray objectAtIndex:rowSelected]];

    [bookDetailViewController title3:ti];

    Music_appAppDelegate *delegate = [[UIApplication sharedApplication]delegate];
    [delegate.booksNavController pushViewController:bookDetailViewController animated:YES];

    [bks nowPlayingView:bookDetailViewController];
    NSString *check = [NSString stringWithFormat:@"%@",[urlArray objectAtIndex:rowSelected]];
    [bookDetailViewController check:check];
    [bks release];

теперь в контроллере второго вида

in didselectrowatindexpath (снова просмотр таблицы)

 if (self.bookDetailViewController == nil)
{
    iPhoneStreamingPlayerViewController *aBookDetail = [[iPhoneStreamingPlayerViewController alloc] initWithNibName:@"iPhoneStreamingPlayerView" bundle:nil];
self.bookDetailViewController = aBookDetail;
    [aBookDetail release];
}

BooksNavController *bks  = [[BooksNavController alloc]init];


bookDetailViewController.title = [NSString stringWithFormat:@"%@",[booksArray objectAtIndex:rowSelected]];  
NSString *ti = [NSString stringWithFormat:@"%@",[booksArray objectAtIndex:rowSelected]];


[bookDetailViewController title3:ti];

Music_appAppDelegate *delegate = [[UIApplication sharedApplication]delegate];
[delegate.booksNavController pushViewController:bookDetailViewController animated:YES];

[bks nowPlayingView:bookDetailViewController];
NSString *check = [NSString stringWithFormat:@"%@",[urlArray objectAtIndex:rowSelected]];
[bookDetailViewController check:check]; 
[bks release];

PlaylistTableViewController *playlistTableViewController = [[PlaylistTableViewController alloc]init];
[playlistTableViewController checkView:2];

playlistTableViewController.bookDetailViewController1 = bookDetailViewController;
[playlistTableViewController release];

Это не работает, хотя представление устанавливается в ноль по какой-то причине, я не знаю почему (я также создал свойство для представления)

Ответы [ 2 ]

1 голос
/ 22 июня 2011

вы можете сделать, как показано ниже:

Ниже приведена идея о том, как достичь вашего состояния.

Предположим, у вас есть 2 контроллера вида.

FirstViewController

SecondViewController

Теперь, Создайте одну переменную в файле SecondViewController.h идентификатор родителя;

И создать один метод:

- (Недействительными) SetParent: (идентификатор) pParent;

в файле SecondViewController.m

реализовать метод, как показано ниже

-(void)setParent:(id)pParent{
    parent=pParent
}

Теперь у вас есть один объект SecondViewController в FirstViewController.

Предположим, это имя objSecondViewController.

После нажатия на secondViewController вызовите метод "setParent".

Как [objSecondViewController setParent: self];

Вот и все. Теперь, если вы хотите вызвать любой метод FirstViewController,

тогда вы можете сделать это используя "родительский" объект.

Одна вещь, импортируйте файл «FirstViewController.h» в ваш файл «SecondViewController.m».

Надеюсь, вы поняли, и это будет вам полезно.

0 голосов
/ 22 июня 2011

Вам нужно будет установить метод delagate или, что еще лучше (и более просто), посмотрите NSNotificationCenter .Он выполнит эту работу, передав метод из одного контроллера представления в другой, и вы можете связать с ним действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...