Поповер без размера - PullRequest
       9

Поповер без размера

0 голосов
/ 27 октября 2011

Я создал класс popover, который я мог бы легко вызывать для основных popovers - вы даете ему данные и устанавливаете размер, и он должен делать все остальное.

Это работало нормально до iOS5, теперь открывается поповер, но только с рамкой, без пробелов и контента вообще.

Я искал и искал, любые идеи, которые вы могли бы броситьпуть был бы отличным.

@protocol BasicPickerDelegate
 - (void)basicPickerItemSelected:(NSMutableDictionary *)thisDic; 
@end


@interface BasicPickerController : UITableViewController {

 // data

 IBOutlet NSMutableArray *theData;

 // stuff to set 

 IBOutlet int myWidth;
 IBOutlet int myHeight;

 IBOutlet int myPopoverNum;

 // delegate
 id<BasicPickerDelegate> delegate;      

}

 @property (nonatomic, retain) IBOutlet NSMutableArray *theData;

 @property (nonatomic, assign) IBOutlet int myWidth; 
 @property (nonatomic, assign) IBOutlet int myHeight;
 @property (nonatomic, assign) IBOutlet int myPopoverNum;

 @property (nonatomic, assign) id<BasicPickerDelegate> delegate;

 - (void)setSize;
 - (void)checkData;

@end

Тогда функция setSize: viewDidLoad

- (void)setSize {

    if (!myWidth || !myHeight) {

      NSLog(@"WIDTH AND HEIGHT NOT SET, SETTING DEFAULTS");
      myWidth = 100;
      myHeight = 100;

    }

    self.contentSizeForViewInPopover = CGSizeMake(myWidth, myHeight);
}

Затем я называю это так:

- (IBAction)showBasicPopover:(id)sender {

    // Show Basic Popover - can be reused

    if (basicPicker != nil) {

        self.basicPicker = nil;
        [self.basicPicker release];

    }

    self.basicPicker = [[[BasicPickerController alloc] initWithStyle:UITableViewStylePlain] autorelease];

    basicPicker.delegate = self;

    self.basicPickerPopover = [[[UIPopoverController alloc] 
                                    initWithContentViewController:basicPicker] autorelease];      

    // Give popover the data it needs

    NSMutableDictionary *sizeDic = [self returnPopoverSize:[sender tag]];

    self.basicPicker.myHeight = [[sizeDic objectForKey:@"height"] intValue];
    self.basicPicker.myWidth = [[sizeDic objectForKey:@"width"] intValue];
    self.basicPicker.myPopoverNum = [sender tag];

    [basicPicker viewDidLoad];

    self.basicPicker.theData = [self returnPopoverData:[sender tag]];

    NSLog(@"giving popover dic (%d) with %d derps", [sender tag], [self.basicPicker.theData count]);

    // Set display settings and show popover

    [basicPicker viewWillAppear:YES];

    CGRect popoverRect = [self.view convertRect:[sender frame] 
                                       fromView:[sender superview]];

    [self.basicPickerPopover presentPopoverFromRect:popoverRect 
                                             inView:self.view 
                           permittedArrowDirections:UIPopoverArrowDirectionAny 
                                           animated:YES];

}

Когда я ее запускаю,появится диалог WIDTH AND HEIGHT NOT SET, SETTIN DEFAULTS.По некоторым причинам это не читает в значениях, которые это дает.Хотя с некоторой тряпкой, даже если я могу заставить это прочитать их в нем, не думаю, что они действительны и переопределяют их.

edit: Так в основном:

При вызове setSize в viewDidLoad он не знает, что такое ширина и высота.Таким образом, он устанавливает значение по умолчанию.

Если setSize не вызывается в viewDidLoad, он приходит к выводу «без размера» - т. Е. У него есть граница всплывающего окна, но нет содержимого вообще.

КогдаsetSize вызывается в viewWillAppear, viewDidAppear или чем-то подобном (после viewDidLoad), на самом деле он не устанавливает размер всплывающего окна.

1 Ответ

0 голосов
/ 02 ноября 2011

Наконец-то понял это.

Мне нужно было присвоить переменные ширины / высоты после создания поповера, но до его инициализации.

Пересмотренный код ниже:

self.basicPicker = [[[BasicPickerController alloc] initWithStyle:UITableViewStylePlain] autorelease];

// Give popover the data it needs

basicPicker.delegate = self;

NSMutableDictionary *sizeDic = [self returnPopoverSize:[sender tag]];

self.basicPicker.myHeight = [[sizeDic objectForKey:@"height"] intValue];
self.basicPicker.myWidth = [[sizeDic objectForKey:@"width"] intValue];
self.basicPicker.myPopoverNum = [sender tag];

// Now init

self.basicPickerPopover = [[[UIPopoverController alloc] 
                            initWithContentViewController:basicPicker] autorelease];      

[basicPicker viewDidLoad];
...