나는 똑같은 문제가 있었는데, 그걸로 셀을 서브 클래스 화하고 그곳에 단추를 놓고 콘센트로 단추를 넣고 사용하면서 모델의 데이터로 채 웁니다. 현재보고있는 셀을 반환하는 메서드입니다.
예를 들어, Person 클래스가 있고 각 사람이 이름, 성 및 친구가있는 경우. 그리고 당신은 셀에서 버튼을 클릭 할 때마다, 특정인에 대한 친구의 수는 내 사람 개체의 이름을 보유하는 개인 NSArray를, 그리고 개인 NSMutableDictionary 생성 1. 개인적으로
_______________DATA SOURCE___________________________
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *comment;
@property (nonatomic) NSInteger numberOfFriends;
+(instancetype)personWithName:(NSString *)aName Surname:(NSString *)aSurname;
@end
#import "Person.h"
@implementation Person
+(instancetype)personWithName:(NSString *)aName Surname:(NSString *)aSurname{
Person *person = [[Person alloc] init];
[person setName:aName];
[person setSurname:aSurname];
[person setNumberOfFriends:0];
return person;
}
@end
_____________________PERSON CELL________________________
#import <UIKit/UIKit.h>
@interface PersonCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel *friendsNum;
@property (strong, nonatomic) IBOutlet UIButton *friendsBtn;
@property (strong, nonatomic) IBOutlet UILabel *nameLabel;
@property (strong, nonatomic) IBOutlet UILabel *surnameLabel;
@end
으로 증가 할 것 내 Person 객체를 유지하기 위해 키를 사람들의 이름으로 설정합니다.
_____________________PERSON TABLE VIEW________________________
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
PersonCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSString *name = [peopleNames objectAtIndex:indexPath.row];
Person *person = [people objectForKey:name];
if(cell == nil)
{
cell = [[PersonCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.nameLabel.text = person.name;
cell.surname.Label.text = person.surname
[cell.friendsButton addTarget:self action:@selector(moreFriends:) forControlEvents:UIControlEventTouchUpInside];
cell.friendsNum.text = [NSString stringWithFormat:@"%i", person.numberOfFriends];
return cell;
}
- (IBAction)moreFriends:(id)sender {
UIButton *btn = (UIButton *)sender;
PersonCell *cell = [self parentCellForView:btn];
Person *person = [people objectForKey:cell.nameLabel.text];
person.numberOfFriends++;
[self.tableView reloadData];
}
-(PersonCell *)parentCellForView:(id)theView
{
id viewSuperView = [theView superview];
while (viewSuperView != nil) {
if ([viewSuperView isKindOfClass:[PersonCell class]]) {
return (PersonCell *)viewSuperView;
}
else {
viewSuperView = [viewSuperView superview];
}
}
return nil;
}
NSNotificationCenter는 합리적인 전략이라고 생각합니다. 버튼의 액션 메소드가 보내는 알림 또는 다른 문제를받지 못하고 있습니까? –
나는 너무나 생각했다 - 나는 그들을 아직 구현하는 요령을 가지고 있다고 생각하지 않는다 ... 더 많은 연습. 이제 같은보기에서 작동하도록 할 수 있지만 다른보기를 시도 할 때 예외가 생깁니다. 우리는 거기에 도달 할 것입니다. –
위임 프로토콜을 만들고 사용하는 방법에 대한 설명입니다. http://www.dosomethinghere.com/2009/07/18/setting-up-a-delegate-in-the-iphone-sdk/ – MystikSpiral