[Xcode 4.5] UIButton "Sent Events" in eigener UIBarButtomItem Klasse

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Xcode 4.5] UIButton "Sent Events" in eigener UIBarButtomItem Klasse

    Guten Morgen,

    ich scheitere gerade bei meinem Projekt an einem einfachen "Sent Event" zu erstellen ?( , sodass ich eine -(IBAction) ausführen kann. Das Problem welches sich mir dabei stellt ist das der Button kein normaler ist, sondern einer der mit folgender Klasse erstellt ist.

    ixPopoverBarButtonItem.h:

    Quellcode

    1. #import <UIKit/UIKit.h>
    2. @interface ixPopoverBarButtonItem : UIBarButtonItem
    3. - (void) showingPopover: (UIPopoverController *)popoverController;
    4. @end


    ixPopoverBarButtonItem.m:

    Quellcode

    1. #import "ixPopoverBarButtonItem.h"
    2. @interface ixPopoverBarButtonItem ()
    3. @property (strong, nonatomic) UIPopoverController *popoverController;
    4. @property (nonatomic) SEL tempAction;
    5. @property (nonatomic,assign) id tempTarget;
    6. - (void) dismissPopover;
    7. @end
    8. @implementation ixPopoverBarButtonItem
    9. @synthesize popoverController = _popoverController;
    10. @synthesize tempAction = _tempAction;
    11. @synthesize tempTarget = _tempTarget;
    12. -(void)showingPopover:(UIPopoverController *)popoverController {
    13. self.popoverController = popoverController;
    14. self.tempAction = self.action;
    15. self.tempTarget = self.target;
    16. self.action = @selector(dismissPopover);
    17. self.target = self;
    18. }
    19. -(void)dismissPopover {
    20. [self.popoverController dismissPopoverAnimated:YES];
    21. self.action = self.tempAction;
    22. self.target = self.tempTarget;
    23. self.popoverController = nil;
    24. self.tempAction = nil;
    25. self.tempTarget = nil;
    26. }
    27. @end
    Alles anzeigen


    DetailViewController.m:

    Quellcode

    1. ...
    2. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    3. {
    4. if ([segue.identifier isEqualToString:@"sequePopover_Settings"]) {
    5. UIStoryboardPopoverSegue* popSegue = (UIStoryboardPopoverSegue*)segue;
    6. [(ixPopoverBarButtonItem *)sender showingPopover:popSegue.popoverController];
    7. }
    8. }
    9. ...
    Alles anzeigen


    Diese brauche ich um ein Popover Fenster, mit einem UIBarButtonItem, zu toggeln. Wie füge ich da nun zum Beispiel ein addTarget:self action:@selector(userTapped) forControlEvents:UIControlEventTouchUpInside ein ?
    Eine andere Lösung wäre auch möglich. Mein Ziel ist es, das beim drücken des Buttons, zusätzlich zu dem toggeln des PopoverFensters, eine -(IBAction) ausgeführt wird (diese soll, wenn möglich, in dem DetailViewController.m stehen)

    Gruß
    Marcel
  • IBActions haben einen einzigen Parameter. Idealerweise 'sender' vom Typ 'id'.

    C-Quellcode

    1. - (IBAction)settingsswitch:(id)sender
    2. {
    3. ...
    4. }

    sollte gehen.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • in der ixPopoverBarButtonItem.m ist ja schon das tempTarget, ich glaube deswegen stürzt es dann auch ab.

    Error:
    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DetailViewController dismissPopover]: unrecognized selector sent to instance 0xa93cb10'


    ich hab das jetzt so verstanden, meintest du das so?

    Quellcode

    1. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    2. {
    3. if ([segue.identifier isEqualToString:@"sequePopover_Settings"]) {
    4. UIStoryboardPopoverSegue* popSegue = (UIStoryboardPopoverSegue*)segue;
    5. [(ixPopoverBarButtonItem *)sender showingPopover:popSegue.popoverController];
    6. [(ixPopoverBarButtonItem *)sender setTarget:self];
    7. //[(ixPopoverBarButtonItem *)sender setAction:@selector(settingsswitch)];
    8. }
    9. }