Я вижу несколько проблем с вашим кодом.
Прежде всего, 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 аргумента.
Я не думаю, что это возможно. Я сидел с той же проблемой.
Используйте
- (void)showFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated
Пример:
[actionSheet showFromRect:[[[myToolBar subviews] objectAtIndex:0] frame] inView:myToolBar animated:YES];
Примечание. Вы должны изменить индекс для objectAtIndex: чтобы соответствовать вашей ситуации и иметь ссылку на панель инструментов
Вам потребуется настройка при смене ориентации.
Я нашел альтернативное решение, которое отлично работает для меня.
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
Я верю, что это поможет.
Я сомневаюсь, что существует санкционированный подход к этому, так как таблицы действий представлены в 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];