wake-up-neo.com

Wie füge ich einem UITableViewController im Interface Builder eine Navigationsleiste hinzu?

Der Interface Builder lässt mich keine Navigationsleiste anklicken und auf einen Table View Controller ziehen !!! Das ist super frustrierend.

Alles, was ich will, ist eine Tabellensicht mit einer Bearbeitungsschaltfläche (im Interface-Builder). Wenn dies nicht möglich ist, wie kann ich dann eine Navigationsleiste programmgesteuert hinzufügen?

Danke im Voraus.

39
klyngbaek

Stellen Sie in der Gliederungsansicht sicher, dass Ihr Table View Controller ausgewählt ist.

Gehen Sie dann zum Menü Editor und klicken Sie auf das Untermenü Embed In , und wählen Sie Navigation Controller und voila. Ihr Navigationscontroller zeigt auf Ihren Tableview-Controller mit einer integrierten Beziehung.

48
Greeso

Verwenden Sie für eine Tabellenansicht mit einer Bearbeitungsschaltfläche oben einen UINavigationController mit einer UITableView als RootView. Das bedeutet, dass Sie eine benutzerdefinierte UITableView-Unterklasse für Ihre Tabellensicht erstellen und diese als RootView Ihrer UINavigationController-Instanz verwenden. (Programmgesteuert wird es mit UINavigationControllers -(id)initWithRootViewController festgelegt. Es kann auch über IB eingestellt werden.)

Kommentieren Sie dann in Ihrer UITableView-Unterklasse die folgende Zeile:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

und voilà, die Ansicht Ihres UINavigationControllers wird als Tabellenansicht mit einer Bearbeitungsschaltfläche auf der rechten Seite der Navigationsleiste angezeigt.

Da sich der Controller oben im Stack befindet, gibt es links keine Schaltfläche "Zurück", sodass Sie self.navigationItem.leftBarButtonItem für das von Ihnen erstellte UIBarButtonItem verwenden können.

17
stephenhow

Ich stimme zu, dass es schwierig ist, herauszufinden, wie man dies im Interface Builder ausführt, aber glücklicherweise ist es möglich, auf diese Weise eine Navigationsleiste und ein Schaltflächenelement zu einer Tabellenansicht hinzuzufügen. So geht's:

  1. Ziehen Sie eine leere Ansicht (eine Instanz von UIView) aus der Bibliothek in den Bereich am oberen Rand der Tabellenansicht. Wenn Sie in die Nähe des Zielbereichs ziehen, wird der Interface Builder ihn blau markieren, um anzuzeigen, wo die Ansicht abgelegt wird. Loslassen, und die Ansicht wird als Unteransicht der Kopfansicht der Tabellenansicht hinzugefügt.
  2. Ziehen Sie eine Navigationsleiste aus der Bibliothek und legen Sie sie auf der soeben hinzugefügten leeren Ansicht ab.
  3. Ziehen Sie ein Bar-Schaltflächenelement aus der Bibliothek und legen Sie es auf der Navigationsleiste ab.

EDIT

Das Problem bei der obigen Vorgehensweise ist, dass, wie Bogatyr ausführt, die Navigationsleiste dann zusammen mit der Tabellenansicht blättert. Apple empfiehlt die Verwendung einer benutzerdefinierten Unterklasse von UIViewController, die sowohl die Navigationsleiste als auch eine Instanz von UITableView besitzt, deren Größe angepasst wird. Leider bedeutet dies, dass Sie das von Ihrer Unterklasse UITableViewController benötigte UIViewController-Verhalten selbst implementieren müssen.

Ein anderer Ansatz, der gut zu funktionieren scheint, ist das Erstellen einer benutzerdefinierten Unterklasse von UIViewController, die eine leere Hintergrundansicht mit der Navigationsleiste sowie eine leere Inhaltsansicht (eine Instanz von UIView) besitzt, die unter die Navigationsleiste passt. Ihre benutzerdefinierte Unterklasse hätte einen Ausgang, der auf eine Instanz von UITableViewController in derselben Nib-Datei verweist.

Dies hat den Vorteil, dass alle Ansichtskomponenten im Interface Builder erstellt und konfiguriert werden können, und es ist keine UITableViewController-Methode von Grund auf erforderlich. Das einzige Detail, das Sie im übergeordneten Element des Table View-Controllers beachten müssten, wäre das Hinzufügen von Table View als Unteransicht der Inhaltsansicht des übergeordneten Elements in viewDidLoad.

Das übergeordnete Element könnte die Aktionsmethoden für die Schaltflächenelemente der Navigationsleiste implementieren und ggf. das Delegatenmuster implementieren.

12
jlehr

Ab iOS6 können Sie die Containeransicht verwenden. Sie müssen also View Controller nehmen, die Navigationsleiste hinzufügen und dann eine Containeransicht zu demselben View-Controller hinzufügen. Der neue View Controller-Link wird automatisch Ihrer Containeransicht hinzugefügt. Löschen Sie nun einfach das und Ihren Table View-Controller im Storyboard. Betten Sie nun den Table View-Controller per Drag & Drop in die Containeransicht ein. Ich hoffe es hilft.

9
cocoaNoob

Fügen Sie zunächst einen Navigationscontroller hinzu und platzieren Sie den Table View Controller (als Root View Controller) auf den Navigationscontroller. So wird es in Code gemacht, weil ich IB nicht verwende.

4
dasdom

Warum können Sie ein navigationItem nicht in eine .xib-Datei ziehen, wenn File's Owner auf eine Unterklasse von UIViewController gesetzt ist, und das navigationItem mit dem Ausgang von navigationItem von UIViewController verbunden ist, ist mir ein Rätsel. Es scheint eine echte Lücke in der IB/XCode-Integration zu sein. Sie können sicherlich eine Instanz von ViewController in eine Xib-Datei ziehen und ein navigationItem in den ViewController ziehen und dann den Titel und die Barbutton-Elemente auf diese Weise festlegen.

Wenn Sie also die Navigationsleiste Ihres UITableViewController-Unterklassenobjekts in IB definieren möchten, müssen Sie Ihr TableVC-Objekt in einer Xib-Datei erstellen (nicht jedoch in der .xib-Datei, die die Tableview für Ihren UITableViewController enthält!). Sie haken das TableVC-Objekt dann entweder an einen Ausgang eines anderen Objekts (wie Ihren Anwendungsdelegierten) an. Dies funktioniert, wenn Sie während der gesamten Lebensdauer Ihrer App nur eine Instanz Ihres TVC benötigen oder wenn Sie Instanzen Ihrer App dynamisch erstellen möchten TableVC im Code laden Sie diese zusätzliche .xib-Datei manuell über die loadNibNamed: owner: options-Methode der NSBundle-Klasse.

3
Bogatyr

Diese Schritte funktionierten für mich in iOS 9:

  1. Fügen Sie dem Storyboard einen View Controller hinzu. Machen Sie UITableViewController als Basisklasse.
  2. Fügen Sie ein Navigationsleistenobjekt oben in den Ansichts-Controller ein.
  3. Fügen Sie eine Tabellenansicht unterhalb der Navigationsleiste hinzu.
  4. Fügen Sie eine Tabellenansicht-Zelle zur Tabellenansicht hinzu.
  5. Einschränkungen hinzufügen.
1
hansengj

Dies ist der andere einfache Weg;

  1. Wählen Sie Ihren TableViewController-Bildschirm im Storyboard aus.
  2. Klicken Sie im rechten Menü auf das Symbol Size Inspector und suchen Sie nach Simulated Size.
  3. Fix in Freiform ändern

Sie können die Navigationsleiste einfach hinzufügen.

0
Ahmet Şentürk