Доступ к UIPopoverController для UIActionSheet на iPad

Я вижу несколько проблем с вашим кодом.

Прежде всего, Python является языком, основанным на пробелах.

В результате, ваш кусок кода

l1 = ListNode(2)
l1 = ListNode(4)
l1 = ListNode(3)
l2 = ListNode(5)
l2 = ListNode(6)
l2 = ListNode(4)
addTwoNumber(l1, l2)

фактически находится в теле вашего класса Solution.

Это нужно вытащить в глобальную область файла. Чтобы сделать этот пост короче, я удалил текст вашего кода.

class Solution:
    # put your code in here

s = Solution()
l1 = ListNode(2)
l2 = ListNode(6)
answer = s.addTwoNumber(l1, l2)

Обратите внимание, как я также создал экземпляр Solution. Нам нужно сделать это, потому что addTwoNumber является методом экземпляра Solution

. Затем вы запускаете этот файл с помощью python your_filename.py

. Вы получаете TypeError: addTwoNumber() missing 1 required positional argument: 'l2', потому что Python автоматически предоставляет [ 118] переменная, которая ссылается на экземпляр объекта при вызове метода экземпляра.

Тем не менее, вы не разрешили Python предоставить self, потому что он в данный момент вызывается так, как будто это статический метод, поэтому он заполняет аргументы слева направо. Это означает, что ему передаются «self» и «l1» с l1 и l2 соответственно, но ваша функция ожидает 3 аргумента.

16
задан westsider 4 December 2010 в 00:22
поделиться

3 ответа

Я не думаю, что это возможно. Я сидел с той же проблемой.

Используйте

- (void)showFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated

Пример:

[actionSheet showFromRect:[[[myToolBar subviews] objectAtIndex:0] frame] inView:myToolBar animated:YES];

Примечание. Вы должны изменить индекс для objectAtIndex: чтобы соответствовать вашей ситуации и иметь ссылку на панель инструментов

2
ответ дан 30 November 2019 в 17:52
поделиться

Вам потребуется настройка при смене ориентации.

Я нашел альтернативное решение, которое отлично работает для меня.

Stick to

- (void)showFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated

В вашем @интерфейсе добавить

UIActionSheet *popoverActionsheet;

также добавить

@property (nonatomic, retain) UIActionSheet *popoverActionsheet;

также добавить

- (IBAction)barButtonItemAction:(id)sender;

Так у вас будет ссылка на ваш лист действий из любой точки вашей реализации.

в вашей реализации

- (IBAction) barButtonItemAction:(id)sender
{
    //If the actionsheet is visible it is dismissed, if it not visible a new one is created.
    if ([popoverActionsheet isVisible]) {
        [popoverActionsheet dismissWithClickedButtonIndex:[popoverActionsheet cancelButtonIndex] 
                                                     animated:YES];
        return;
    }

    popoverActionsheet = [[UIActionSheet alloc] initWithTitle:nil
                                                     delegate:self
                                            cancelButtonTitle:nil 
                                       destructiveButtonTitle:nil
                         otherButtonTitles:@"Save Page", @"View in Safari", nil];

    [popoverActionsheet showFromBarButtonItem:sender animated:YES];
}

в вашем делегате actionsheet реализуйте

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{

    if (buttonIndex == [actionSheet cancelButtonIndex]) return;

    //add rest of the code for other button indeces
}

и не забудьте освободить popoverActionsheet в

- (void)dealloc

Я верю, что это поможет.

10
ответ дан 30 November 2019 в 17:52
поделиться

Я сомневаюсь, что существует санкционированный подход к этому, так как таблицы действий представлены в UIPopoverViews, который связан с UIViewController, а не UIPopoverController

NSLog(@"%@",[[[popoverActionsheet superview] superview] passthroughViews]);

Просмотр заголовочного файла UIPopoverView (UNDOCUMENTED) дает следующее решение, хотя и недокументированное. Сомневаюсь, что вы сможете протащить это мимо App Reviewers, но попробуйте, если вы думаете, что это стоит попробовать.

http://github.com/kennytm/iphone-private-frameworks/blob/master/UIKit/UIPopoverView.h

NSArray *passthroughViews = [[[popoverActionsheet superview] superview] passthroughViews];

        NSMutableArray *views = [passthroughViews mutableCopy];
        [views addObject:[self view]];
        [[[popoverActionsheet superview] superview] setPassthroughViews:views];
        [views release];
4
ответ дан 30 November 2019 в 17:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: