2010-12-23 7 views
2

Ich versuche, eine Schaltfläche Fußzeile von TableView zu setzen.Mit gerundet-Rect-Taste für TableView Fußzeile in iPhone?

Dies ist, was ich getan habe und ich kann die Schaltfläche nicht sehen, aber die Zeichenfolge "RESULT" wird angezeigt.

Ich habe alles versucht, was mir einfällt. aber ich konnte nicht herausfinden, was falsch ist. Ich brauche deine Hilfe!

- (void)viewDidLoad { 
btnSeeResult = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[btnSeeResult setTitle:@"RESULT" forState:UIControlStateNormal]; 

viewResult = [[UIView alloc] initWithFrame:btnSeeResult.frame]; 
[viewResult addSubview:btnSeeResult]; 

self.tableView.tableFooterView = btnSeeResult; 
} 

-(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ 
    return viewResult.bounds.size.height; 
} 

Wie auch immer, was ist der Unterschied zwischen der Fußzeile Ansicht Einstellung direkt wie

tableView.tableFooterView = footerView; 

und (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section Methode ??

Antwort

2

Es gibt keinen Grund für die viewResult Wrapper. Ein UIButton ist ein UIView, daher gibt es keinen Grund, ihn in diesem Fall in einen anderen UIView einzubinden, zumal Sie die Schaltfläche der Fußzeileneigenschaft der Tabelle zuweisen, was bedeutet, dass die Tabelle steuern sollte, wie und wann die Schaltflächenansicht letztendlich angezeigt wird.

Möglicherweise müssen Sie den Rahmen des btnSeeResult so einstellen, dass er eine Höhe hat. Es ist möglich, dass die Höhe in diesem Fall 0 ist, da Sie niemals einen Rahmen dafür setzen. Sie könnten auch etwas wie [btnSeeResult sizeToFit]; versuchen, nachdem Sie den Titel festgelegt haben, der die Größe so verändern sollte, dass Platz für den Etikettentext geschaffen wird.

Was Ihre zweite Frage, die Differenz zwischen tableFooterView und -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section ist, dass erstere eine Ansicht definiert, auf den Boden der gesamten Tabelle zu befestigen, wohingegen die Delegatmethode erlaubt es, jeden Unterabschnitt in der Tabelle verschiedene Fußzeilen geben . Beide können gleichzeitig verwendet werden, und in diesem Fall würde die Fußzeile des letzten Abschnitts erscheinen, gefolgt von der tableFooterView.

+0

vielen Dank für Ihre Antwort. Nachdem ich die sizeToFit-Methode aufgerufen habe, wird die Schaltfläche angezeigt. aber seine Höhe ist perfekt an die Saite angepasst, aber der Knopf ist ganz nach links und rechts gestreckt. Was soll ich machen? Verdammt, ich verbringe einige Tage mit diesem Knopf! – SeniorLee

0

SeniorLee,

Willkommen bei Stackoverflow!

Sie haben die richtige Antwort in Frage kommen - es ist dieser Code:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 

Wenn die Tabellenansicht Ihre Tabelle zu konstruieren, geht es zu zwei Klassen ruft zurück - die Delegierten der Tabelle und die Datenquelle der Tabelle

Datenquelle ist genau das, was der Name impliziert - die Quelle der Daten in Ihrer Tabelle. Der Delegat dagegen handhabt die Echtzeit-Interaktion mit der Tabelle und wie sie angezeigt wird (z. B. was passiert, wenn die Zeile gedrückt wird?).

In vielen Fällen legen Programmierer sowohl die Datenquelle als auch den Delegaten der Tabellenansicht auf dieselbe Klasse fest - den UITableViewController, der die Tabellenansicht besitzt.

Wie auch immer, auf Ihre Frage:

Es ist sehr wahrscheinlich, dass die direkte Zuordnung nicht explizit zu arbeiten, weil es ein Delegierter Rückruf ist. Wenn die Tabellenansicht sich selbst auslegt, fragt sie ihren Delegierten "Haben Sie eine Ansicht für die Fußzeile in Abschnitt x?". Das ist die obige Methode.

Wenn Sie diese Methode nicht implementieren, wird die Tabellenansicht eine Standardimplementierung haben, die etwas tut - in diesem Fall wahrscheinlich auf Null setzen.

Also meine Vermutung ist, dass, obwohl Sie diese Eigenschaft direkt in ViewDidLoad festgelegt, wird es von der Tabellenansicht zu Null überschrieben, da Sie den Delegaten Callback nicht implementieren. Verschieben Sie stattdessen Ihren Ansichtscode in die Callback-Methode, und das sollte wunderbar funktionieren.

Auch glaube ich nicht, dass Sie Ihre UIButton in einem UIView umbrechen müssen - UIButton ist eine Unterklasse von UIView und sollte daher gut funktionieren.

+0

Vielen Dank;) Ihre Antwort hat wirklich viel geholfen! – SeniorLee

Verwandte Themen