#iphone
#iPhone
Вопрос:
Я создаю приложение, которое должно позволять пользователю прокручивать изображения. Поскольку у меня есть много изображений (загруженных из Интернета), что я делаю, так это то, что у меня есть кнопки ВВЕРХ и вниз в родительском представлении, кроме того, у меня есть вид прокрутки. В зависимости от выбранной опции (вверх или вниз) я добавляю представление ImageClass (созданный класс, который расширяет UIViewController) к виду прокрутки.
Теперь в выбранном представлении пользователь может отметить точку или выполнить любые действия.
Вопрос в том, как из родительского представления я могу вызывать методы Uiviewcontroller. Я знаю, как я могу установить методы делегирования, но я хочу, чтобы родительский контроллер мог вызывать любой метод, скажем, метод redraw, который перерисовывал бы все представление.
Код:
-(IBAction) down:(id) sender{
[scrollView2 removeFromSuperview];
}
-(IBAction) down :(id) sender {
[scrollView2 removeFromSuperview];
if(scrollView2 == nil)
scrollView2 = [[UIScrollView alloc] init];
[self.view addSubview:scrollView2];
[self.view sendSubviewToBack:scrollView2];
[scrollView2 setBackgroundColor:[UIColor blackColor]];
[scrollView2 setCanCancelContentTouches:NO];
scrollView2.clipsToBounds = YES;
// default is NO, we want to restrict drawing within our scrollview
scrollView2.indicatorStyle = UIScrollViewIndicatorStyleWhite;
// CSImageView is a class which of the type UIViewController
imageVie = [[CSImageView alloc] init];
[scrollView2 addSubview:imageVie.view];
[scrollView2 setContentSize:CGSizeMake(1500,1500)];
[scrollView2 setScrollEnabled:YES];
[imageView release];
}
Теперь из родительского контроллера представления я хочу вызвать say:
imageVie.redraw(); метод
Код для CSImageView
@interface CSImageView : UIViewController {
NSNumber *imageId ;
}
@property (nonatomic, retain) NSNumber *venueId;
-(void) redraw;
@end
@implementation CSImageView
@synthesize imageId;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
-(void) redraw {
NSLog(@"I am ehre in the test function");
}
@end
Не могли бы вы, пожалуйста, помочь мне в том же. Я не могу вызвать метод перерисовки. Любой ввод был бы оценен.
Ответ №1:
Во-первых, CSImageView
вероятно, это должен быть подкласс UIView
, а не UIViewController
. Вы должны сохранить ссылку на свой экземпляр (т. Е. как переменную экземпляра или синтезированное свойство), чтобы вы могли получить к нему доступ из методов, отличных от - down:
.
Комментарии:
1. Эй, Кэмерон, я пытался сделать то же самое. Но я не смог получить доступ к этому методу. Любой ввод в том же направлении был бы оценен. Пожалуйста, дайте мне знать, как продолжить то же самое.
Ответ №2:
Вау.
Я не могу сказать, что следую тому, что вы закодировали, но вот как вы это делаете.
В этой части … добавьте тег к представлению
// CSImageView — это класс типа UIViewController
imageVie = [[CSImageView alloc] init];
imageVie.tag = 99 // Любое число. Предпочтительно константу
[scrollView2 addSubview:imageVie.view]; …
Затем в родительском
контроллер представления. Вы можете …
-(IBAction) down: (id) отправитель {
CSImageView *view = [scrollView2 viewWithTag:99]; [view redraw];
… }
Что-то вроде этого.