2009-10-11 33 views
5

Tôi có một ứng dụng chia động từ hiển thị các bản dịch động từ trong ô đầu tiên của bảng. Hiện tại danh sách dịch chỉ là một chuỗi (danh sách được phân cách bằng dấu phẩy) nhưng tôi muốn thay đổi nó thành các nút có thể nhấp. Tôi đã chơi xung quanh việc thêm nút vào chế độ xem ô mà không có quá nhiều thành công nhưng trải nghiệm duy nhất của tôi với các ô tùy chỉnh đã sử dụng vị trí cụ thể, vì vậy tôi không chắc chắn cách đạt được danh sách nút động (độ rộng thay đổi) trong ô.Thêm các nút động vào uitableviewcell - ứng dụng iPhone

Bất kỳ trợ giúp nào được đánh giá cao.

Chúc mừng.

Trả lời

3

Tạo đối tượng UIView. Đặt các đối tượng UIButton của bạn làm phụ đề của chế độ xem gốc này.

Khi bạn có điều đó, bạn có thể thêm chế độ xem gốc này vào thuộc tính contentView của ô.

Trong phương thức ủy nhiệm -tableView:cellForRowAtIndexPath:, bạn sẽ tạo chế độ xem cha mẹ (và số lượng và loại nút bên trong) dựa trên một số trạng thái có điều kiện, trước khi thêm nó vào ô contentView của ô.

Để thực hiện điều này theo lập trình, ngay sau khi một số điều kiện thay đổi, hãy chạy [tableView reloadData] hoặc các phương pháp tương tự để làm mới chế độ xem bảng và các ô của bảng.

4

Đỗ sau

-(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] 
} 

Bạn sẽ phải chăm sóc chiều rộng di động, chiều cao vv trong khi tạo ra các nút tự động.

+0

hi, nhờ trả lời của bạn. Tôi đã có một vết nứt ở đây nhưng không nhận được bất cứ điều gì xuất hiện. Tôi sẽ có một lần nữa khi tôi có cơ hội, tôi xin lỗi tôi đã không thể trả lời sớm hơn (hoặc dành đủ thời gian để làm việc thông qua các vấn đề tôi vẫn nhận được). Tôi sẽ cố gắng làm như vậy càng sớm càng tốt. – alan

4

Tôi vừa làm điều này cho ứng dụng iPad mới của mình nên tôi nghĩ mình sẽ dán mã.

// 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];  

Chúc mừng.

+0

những gì có thể được thực hiện nếu chúng ta không có tiêu đề nút để phân biệt các nút và họ không có bất kỳ văn bản. Trong trường hợp của tôi, tôi chỉ sử dụng các hình ảnh thay vì tiêu đề nút. Điều gì có thể được thực hiện trong trường hợp như vậy? –

+0

Nếu bạn đang sử dụng hình ảnh thì tôi cho rằng bạn biết kích thước của chúng. Trong trường hợp này, bạn có thể chỉ cần đặt chúng trong khoảng thời gian đều đặn. Đoạn mã trên sử dụng fontSize.width để bù đắp. Bạn chỉ cần có thể sử dụng chiều rộng của hình ảnh của bạn. – alan

0

Bạn có thể làm điều này bên trong hàm 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) 

Thêm chức năng khác trong cùng một lớp mà sẽ nhận được nút sự kiện khai thác

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

Khi bạn di chuyển ô lên hoặc xuống, nút trên sẽ tái tạo lại. –

+0

Tạo nút bên ngoài chức năng và thêm vào ô sau khi kiểm tra xem nút có tồn tại không. Nếu có nhiều ô duy trì một bản đồ hoặc chỉ mục của các nút. – srinivas

Các vấn đề liên quan