2009-10-11 11 views
5

Mam aplikację koniugacji czasownika, która wyświetla tłumaczenia czasowników w pierwszej komórce tabeli. Obecnie lista tłumaczeń jest po prostu ciągiem (lista rozdzielana przecinkami), ale chciałbym ją zmienić, aby miała klikalne przyciski. Miałem zabawę dodając przyciski do widoku komórki bez większego sukcesu, ale moje jedyne doświadczenie z komórkami niestandardowymi używa specyficznego pozycjonowania, więc nie jestem pewien, jak uzyskać dynamiczną listę przycisków (o różnych szerokościach) w komórce.Dodawanie przycisków dynamicznie do pliku uitableviewcell - iPhone app

Każda pomoc bardzo ceniona.

Pozdrawiam.

Odpowiedz

3

Utwórz obiekt UIView. Ustaw obiekty UIButton jako subviews tego widoku nadrzędnego.

Po uzyskaniu tego możesz dodać ten widok nadrzędny do właściwości komórki contentView.

W metodzie delegata należy wygenerować widok rodzica (oraz liczbę i typ przycisków wewnątrz) w oparciu o pewien stan warunkowy przed dodaniem do komórki contentView.

Jeśli chodzi o programowanie, tak szybko jak zmienia się jakiś stan, uruchom [tableView reloadData] lub podobne metody, aby odświeżyć widok tabeli i jej komórki.

4

Do następujących

-(CGRect)placeAButton:(NSString*)textFromField withCell:(UITableViewCell*)cell 
{ 
    CGSize  theSize; 
    CGSize  constraintSize; 

    // Create a button and add as subview to cell 
    // Get coordinates to place the button 

    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 

    button.titleLabel.font    = [UIFont systemFontOfSize:MEDIUM_FONT_SIZE];; 
    button.titleLabel.lineBreakMode  = UILineBreakModeTailTruncation; 
    button.contentVerticalAlignment  = UIControlContentVerticalAlignmentCenter; 
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [button setTitle:textFromField forState:UIControlStateNormal]; 

    UIImage *buttonBkground; 
    buttonBkground = [UIImage imageNamed:@"blueButton.png"]; 
    UIImage *newImage = [buttonBkground stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0]; 
    [button setBackgroundImage:newImage forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:button]; 

[self.tableView reloadData] 
} 

Musisz dbać o szerokości komórki, wysokość itp podczas tworzenia przycisków dynamicznie.

+0

cześć, dzięki za odpowiedzi. Miałem jedno pęknięcie, ale nic mi się nie ukazało. Będę miał jeszcze jedną szansę, gdy będę miał szansę, przepraszam, że nie byłem w stanie odpowiedzieć wcześniej (lub poświęcić wystarczająco dużo czasu, aby rozwiązać problemy, które wciąż mam). Spróbuję to zrobić JAK NAJSZYBCIEJ. – alan

4

Po prostu zrobiłem to dla mojej nowej aplikacji na iPada, więc pomyślałem, że wkleję kod.

// NOTE - This is within a loop  
// Add the translation as a button 
    UIButton *translationButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    translationButton.backgroundColor = [UIColor clearColor]; 
    translationButton.titleLabel.font = [UIFont boldSystemFontOfSize:16]; 
    [translationButton setTitle:translation forState:UIControlStateNormal]; 
    [translationButton addTarget:self action:@selector(translationSearch:) forControlEvents:UIControlEventTouchUpInside]; 
    // Work out required size 
    fontSize = [translationButton.titleLabel.text sizeWithFont:translationButton.titleLabel.font];  
    CGRect buttonFrame = CGRectMake(xOffset, 15, fontSize.width + 20.0, 24); 
    [translationButton setFrame:buttonFrame]; 

    // Now set the new x Offset 
    xOffset = buttonFrame.origin.x + buttonFrame.size.width + 6.0; 

    [verbView addSubview:translationButton];  

Pozdrawiam.

+0

co można zrobić, jeśli nie mamy tytułu przycisku, aby odróżnić przyciski i nie mają one żadnego tekstu. W moim przypadku używam tylko obrazów zamiast tytułu przycisku. Co można zrobić w takim przypadku? –

+0

Jeśli używasz obrazów, zakładam, że znasz ich rozmiar. W takim przypadku możesz po prostu umieścić je w regularnych odstępach czasu. Powyższy kod używa fontSize.width do obliczenia offsetu. Powinieneś po prostu być w stanie użyć szerokości obrazu. – alan

0

Można to zrobić wewnątrz funkcji viewcontroller cellForRowAtIndexPath:

var btn = UIButton(frame: CGRectMake(100, 100, 100, 20)); 
    btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal); 
    btn.setTitle("My Button", forState:UIControlState.Normal); 
    btn.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside); 

    //add the buttons to the cell 
    cell.contentView.addSubview(btn) 

Dodaj inną funkcję w tej samej klasie, która otrzyma gwintowanych zdarzenia związane z przyciskiem

func buttonTapped(sender: UIButton!) 
{ 
    println("Button Tapped") 
} 
+0

Po przesunięciu komórki w górę lub w dół, powyższy przycisk ponownie się odtwarza. –

+0

Utwórz przycisk poza funkcją i dodaj do komórki po sprawdzeniu, czy przycisk istnieje. Jeśli istnieje wiele komórek, zachowaj mapę lub indeks przycisków. – srinivas