iOS 7 - 테이블 보기에서 달력 보기를 제자리에 표시하는 방법?
WWDC 2013 비디오에서 Apple은 iOS 7의 테이블 뷰에 선택기를 제자리에 표시할 것을 제안합니다. 테이블 뷰 셀 사이에 뷰를 삽입하고 애니메이션화하는 방법은 무엇입니까?
이와 같이 Apple 캘린더 앱에서:
함께, 코드인 iOS7을 했습니다.DateCell
.
테이블 셀에 있는 날짜 객체의 형식화된 표시와 UIDatePicker를 사용하여 해당 값을 편집하는 방법을 보여줍니다.이 테이블의 대리인으로서 샘플은 "didSelectRowAt" 메서드를 사용합니다.인덱스 경로"를 눌러 UIDatePicker 컨트롤을 엽니다.
iOS 6.x 이전 버전의 경우 UIView애니메이션을 사용하여 UIDatePicker를 화면 위와 아래로 이동합니다.iOS 7.x의 경우 UIDatePicker가 테이블 보기에 인라인으로 추가됩니다.
UIDatePicker의 작업 방법은 사용자 지정 테이블 셀의 NSDate 속성을 직접 설정합니다.또한 이 샘플은 NSDateFormatter 클래스를 사용하여 사용자 지정 셀의 날짜 형식 모양을 만드는 방법을 보여줍니다.
샘플 코드는 DateCell에서 다운로드할 수 있습니다.
당신은 제가 이전에 아래에 제공했던 답변을 사용하거나 이 작업을 훨씬 더 간단하고 깨끗하게 만들기 위해 만든 Swift의 이 새로운 클래스를 사용할 수 있습니다: https://github.com/AaronBratcher/TableViewHelper
Apple에서 제공하는 코드는 다음과 같은 몇 가지 측면에서 문제가 있습니다.
- 정적 테이블View는 테이블View:cellForRowAtIndexPath 메서드를 사용하고 있기 때문에 사용할 수 없습니다.
- 마지막 달력 보기 셀 아래에 추가 행이 없는 경우 코드가 충돌합니다.
정적 셀 표의 경우, 날짜 표시 셀 아래에 달력 보기 셀을 정의하고 편집 중인지 여부를 식별하는 플래그가 있습니다.이 경우 적절한 셀 높이를 반환하고, 그렇지 않으면 셀 높이를 0으로 반환합니다.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0 && indexPath.row == 2) { // this is my picker cell
if (editingStartTime) {
return 219;
} else {
return 0;
}
} else {
return self.tableView.rowHeight;
}
}
날짜를 표시하는 행이 클릭되면 플래그를 변경하고 선택기를 표시하는 업데이트 애니메이션을 수행합니다.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0 && indexPath.row == 1) { // this is my date cell above the picker cell
editingStartTime = !editingStartTime;
[UIView animateWithDuration:.4 animations:^{
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:2 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView reloadData];
}];
}
}
동일한 테이블에 여러 개의 날짜/시간 선택기가 있는 경우 클릭 시 플래그를 설정하고 해당 행을 다시 로드합니다.정적 테이블을 유지할 수 있고 코드를 훨씬 적게 사용할 수 있으며 무슨 일이 일어나고 있는지 이해하기가 더 쉽다는 것을 알게 되었습니다.
스토리보드와 정적 테이블을 사용하여 다음 코드를 사용하여 동일한 결과를 얻을 수 있었습니다.이것은 이상한 모양의 셀이 많거나 동적으로 표시/숨기는 셀이 여러 개인 경우에도 이 코드는 계속 작동하기 때문에 좋은 솔루션입니다.
@interface StaticTableViewController: UITableViewController
@property (weak, nonatomic) IBOutlet UITableViewCell *dateTitleCell; // cell that will open the date picker. This is linked from the story board
@property (nonatomic, assign, getter = isDateOpen) BOOL dateOpen;
@end
@implementation StaticTableViewController
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
// This is the index path of the date picker cell in the static table
if (indexPath.section == 1 && indexPath.row == 1 && !self.isDateOpen){
return 0;
}
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
[tableView beginUpdates];
if (cell == self.dateTitleCell){
self.dateOpen = !self.isDateOpen;
}
[tableView reloadData];
[self.tableView endUpdates];
}
Apple에서 DateCell 소스를 가져와서 스토리보드 파일을 제거했습니다.
스토리보드가 없는 것을 원한다면, https://github.com/ajaygautam/DateCellWithoutStoryboard 을 보세요.
이에 대한 최고의 튜토리얼 중 하나는 iOS 7 인라인 UIDatePicker – Part 2입니다.기본적으로 정적 테이블 뷰 셀을 사용하고 몇 가지 추가 방법을 구현합니다.이를 위해 Xamarin과 C#을 사용했습니다.
은 활동을 해야 .Clip Subviews
.
높이 설정:
public override float GetHeightForRow (UITableView tableView, NSIndexPath indexPath)
{
if (indexPath.Row == 4) {
return (datePickerIsShowing) ? 206f : 0.0f;
}
return base.GetHeightForRow(tableView,indexPath);
}
변수: 클스변수다보래:private bool datePickerIsShowing = false;
달력 보기 표시:
private void showDatePickerCell(){
datePickerIsShowing = true;
this.TableView.BeginUpdates ();
this.TableView.EndUpdates ();
this.datePicker.Hidden = false;
this.datePicker.Alpha = 0.0f;
UIView.Animate (0.25, animation:
() => {
this.datePicker.Alpha = 1.0f;
}
);
}
달력 보기 숨기기:
private void hideDatePickerCell(){
datePickerIsShowing = false;
this.TableView.BeginUpdates ();
this.TableView.EndUpdates ();
UIView.Animate (0.25,
animation: () => {
this.datePicker.Alpha = 0.0f;
},
completion: () => {
this.datePicker.Hidden = true;
}
);
}
이 기능을 호출합니다.
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
if (indexPath.Row == 3) {
if (datePickerIsShowing) {
hideDatePickerCell ();
} else {
showDatePickerCell ();
}
}
this.TableView.DeselectRow (indexPath, true);
}
테이블 뷰에서 인라인 선택기를 인라인으로 추가하는 프로세스를 간소화하기 위해 나만의 사용자 정의 뷰 컨트롤러를 만들었습니다.이를 하위 분류하고 몇 가지 간단한 규칙을 따르면 달력 보기 프리젠테이션이 처리됩니다.
사용 방법을 시연하는 예제 프로젝트와 함께 https://github.com/ale84/ALEInlineDatePickerViewController 에서 찾을 수 있습니다.
Apple의 datecell 예제에서 마지막 datecell 아래 행이 있거나 오류가 발생하는 결함에 대한 답변을 찾았습니다.셀 내 행 위치IndexPath 메서드가 ItemData 행 바꾸기
NSArray *itemsArray = [self.dataArray objectAtIndex:indexPath.section];
NSDictionary *itemData = nil;
if(![indexPath isEqual:self.datePickerIndexPath])
itemData = [itemsArray objectAtIndex:modelRow];
샘플 코드를 교체한 후 아래에 셀이 없어도 datePicker 셀을 표시할 수 있습니다.
방금 스택 오버플로에 가입했으니 잘못된 곳이나 다른 곳에 있다면 사과드립니다.
Aaron Bratcher의 답변은 여러 섹션과 함께 사용하는 경우를 제외하고는 효과가 있었습니다.애니메이션들은 약간 형편없었고 다음 부분들은 잘 미끄러지지 않았습니다.이 문제를 해결하기 위해 다음 섹션 집합을 반복하고 달력 보기의 높이와 동일한 양으로 행을 변환했습니다.
didSelectRowAt를 편집했습니다.인덱스 경로:
// Return Data to delegate: either way is fine, although passing back the object may be more efficient
// [_delegate imageSelected:currentRecord.image withTitle:currentRecord.title withCreator:currentRecord.creator];
// [_delegate animalSelected:currentRecord];
if (indexPath.section == 1 && indexPath.row == 0) { // this is my date cell above the picker cell
editingStartTime = !editingStartTime;
[UIView animateWithDuration:.4 animations:^{
int height = 0;
if (editingStartTime) {
height = 162;
}
UITableViewCell* temp = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1]];
[temp setFrame:CGRectMake(temp.frame.origin.x, temp.frame.origin.y, temp.frame.size.width, height)];
for (int x = 2; x < [tableView numberOfSections]; x++) {
for (int y = 0; y < [tableView numberOfRowsInSection:x]; y++) {
UITableViewCell* temp = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:y inSection:x]];
int y_coord = temp.frame.origin.y-162;
if (editingStartTime) {
y_coord = temp.frame.origin.y+162;
}
[temp setFrame:CGRectMake(temp.frame.origin.x, y_coord, temp.frame.size.width, temp.frame.size.height)];
}
}
}completion:^(BOOL finished){
[self.tableView reloadData];
}];
}
이전 답변에 추가하여,
@datinc와 @Aaron Bratcher 솔루션을 모두 사용해 보았습니다. 둘 다 잘 작동했지만 그룹화된 정적 테이블 보기에서 애니메이션이 그리 깨끗하지 않았습니다.
그것을 가지고 놀다가 나는 깨끗하고 나에게 잘 작동하는 이 코드를 얻었습니다.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0 && indexPath.row == 1)
{
if (self.isPickerOpened)
{
return 162;
}
else
{
return 0;
}
}
else
{
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 && indexPath.row == 0) {
[tableView beginUpdates];
self.isPickerOpened = ! self.isPickerOpened;
[super tableView:tableView heightForRowAtIndexPath:indexPath];
[self.tableView endUpdates];
}
}
주요 변경 사항은 다음을 사용하는 것입니다.
[super tableView:tableView heightForRowAtIndexPath:indexPath];
행을 업데이트하기 위해 나머지 표 섹션과 셀은 애니메이션이 되지 않습니다.
누군가에게 도움이 되길 바랍니다.
샤니
이전 답변과 @Aaron Bratcher 솔루션에 추가...
iOS 9부터 애니메이션이 끊기고 테이블이 로딩되는 데 시간이 오래 걸리고 짜증이 날 정도였습니다.저는 날짜 선택자가 스토리보드에서 로딩하는 속도가 느린 것으로 범위를 좁혔습니다.스토리보드가 아닌 프로그래밍 방식으로 피커를 추가하면 로딩 성능이 향상되고, 부산물로서 애니메이션이 더 매끄럽게 진행됩니다.
스토리보드에서 달력 보기를 제거하고 빈 셀이 있으면 이전 답변과 같이 높이를 설정한 다음 viewDidLoad에서 초기화를 호출합니다.
- (void)initialiseDatePickers
{
self.isEditingStartTime = NO;
self.startTimePickerCell.clipsToBounds = YES;
UIDatePicker *startTimePicker = [[UIDatePicker alloc] init];
[startTimePicker addTarget:self action:@selector(startTimePickerChanged:) forControlEvents:UIControlEventValueChanged];
[self.startTimePickerCell addSubview:startTimePicker];
}
그런 다음 작업을 구현합니다.
- (IBAction)startTimePickerChanged:(id)sender
{
NSLog(@"start time picker changed");
}
이렇게 하면 테이블이 이전보다 훨씬 빠르게 로드됩니다.또한 다음에서 애니메이션 라인을 제거합니다.didSelectRowAtIndexPath
그것 없이 부드럽게 애니메이션되기 때문에 (ymmv).
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0 && indexPath.row == 1) { // this is my date cell above the picker cell
editingStartTime = !editingStartTime;
}
}
애니메이션 없이 이 답변을 사용하면 iOS 8.1에서 올바르게 작동합니다. 아래의 Swift로 변환했습니다.
import UIKit
class TableViewController: UITableViewController {
var editingCell: Bool = false
@IBOutlet weak var myCell: UITableViewCell!
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
// Change the section and row to the title cell the user taps to reveal
// the cell below
if (indexPath.section == 0 && indexPath.row == 2 && !editingCell) {
return 0
} else {
return self.tableView.rowHeight
}
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.tableView.deselectRowAtIndexPath(indexPath, animated: false);
var cell = tableView.cellForRowAtIndexPath(indexPath)
self.tableView.beginUpdates()
if (cell == self.myCell) {
editingType = !editingType;
}
self.tableView.endUpdates()
}
}
정적 상수 번호 없이 문제를 해결할 수 있는 또 다른 방법이 있습니다.모든 셀을 정적 및 동적 테이블 보기에서 사용할 수 있습니다.이 방법은 제목과 달력 보기 모두에 단일 셀을 사용합니다!
하지만 당신은 당신이 원하는 만큼 당신의 테이블에 데이트 상대를 고를 수 있습니다!
UITableViewCell 하위 클래스를 만듭니다.
모든 테이블 뷰 셀은 이 클래스에서 상속되어야 하며 모든 행에 대해 셀 높이를 수동으로 설정해야 합니다.
//
// CPTableViewCell.h
//
// Copyright (c) CodePigeon. All rights reserved.
//
@class CPTableViewCell;
#define kUIAnimationDuration 0.33f
@protocol CPTableViewCellDelegate <NSObject>
@required
- (void)tableViewCellDidChangeValue:(CPTableViewCell *)cell;
@optional
- (void)tableViewCellDidBecomeFirstResponder:(CPTableViewCell *)cell;
- (void)tableViewCellResignedFirstResponder:(CPTableViewCell *)cell;
@end
@interface CPTableViewCell : UITableViewCell
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) IBOutlet CPTableViewCell *nextCell;
@property (nonatomic, weak) IBOutlet id<CPTableViewCellDelegate> delegate;
@property (nonatomic, copy) IBInspectable NSString *dataBindKey;
@property (nonatomic) IBInspectable CGFloat height;
@property (nonatomic, readonly) BOOL isFirstResponder;
@property (nonatomic) BOOL isEnabled;
- (void)commonInit;
- (id)value;
- (void)setValue:(id)value;
@end
//
// CPTableViewCell.m
//
// Copyright (c) CodePigeon. All rights reserved.
//
#import "CPTableViewCell.h"
@interface CPTableViewCell ()
@end
@implementation CPTableViewCell
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self)
return nil;
[self commonInit];
return self;
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (!self)
return nil;
[self commonInit];
return self;
}
- (void)commonInit
{
_isFirstResponder = NO;
_isEnabled = YES;
}
- (BOOL)canBecomeFirstResponder
{
return _isEnabled;
}
- (BOOL)becomeFirstResponder
{
if ([_delegate respondsToSelector:@selector(tableViewCellDidBecomeFirstResponder:)])
[_delegate tableViewCellDidBecomeFirstResponder:self];
return _isFirstResponder = YES;
}
- (BOOL)resignFirstResponder
{
if (_isFirstResponder)
{
if ([_delegate respondsToSelector:@selector(tableViewCellResignedFirstResponder:)])
[_delegate tableViewCellResignedFirstResponder:self];
_isFirstResponder = NO;
}
return _isFirstResponder;
}
- (id)value
{
[self doesNotRecognizeSelector:_cmd];
return nil;
}
- (void)setValue:(id)value
{
[self doesNotRecognizeSelector:_cmd];
}
@end
CPTableViewCell에서 CPDatePickerTableViewCell 클래스를 만듭니다.
//
// CPDatePickerTableViewCell.h
//
// Copyright (c) CodePigeon. All rights reserved.
//
#import "CPTableViewCell.h"
@interface CPDatePickerTableViewCell : CPTableViewCell
@property (nonatomic, copy) IBInspectable NSString *dateFormat;
@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
@property (nonatomic, weak) IBOutlet UILabel *dateLabel;
@property (nonatomic, weak) IBOutlet UIDatePicker *datePicker;
@end
//
// CPDatePickerTableViewCell.m
//
// Copyright (c) CodePigeon. All rights reserved.
//
#import "CPDatePickerTableViewCell.h"
#define kCPDatePickerTableViewCellPickerHeight 162.f
@interface CPDatePickerTableViewCell () <UITextFieldDelegate, UIPickerViewDelegate>
{
NSDateFormatter *_dateFormatter;
BOOL _isOpen;
}
@end
@implementation CPDatePickerTableViewCell
- (void)awakeFromNib
{
[super awakeFromNib];
_dateFormatter = [NSDateFormatter new];
[_dateFormatter setDateFormat:_dateFormat];
self.selectionStyle = UITableViewCellSelectionStyleNone;
_dateLabel.text = [_dateFormatter stringFromDate:_datePicker.date];
_datePicker.alpha = 0.f;
_isOpen = NO;
}
- (BOOL)becomeFirstResponder
{
if (_isOpen == NO)
{
self.height += kCPDatePickerTableViewCellPickerHeight;
}
else
{
self.height -= kCPDatePickerTableViewCellPickerHeight;
}
[UIView animateWithDuration:kUIAnimationDuration animations:^{
_datePicker.alpha = _isOpen ? 0.0f : 1.0f;
}];
[self.tableView beginUpdates];
[self.tableView endUpdates];
_isOpen = !_isOpen;
[self.tableView endEditing:YES];
return [super becomeFirstResponder];
}
- (BOOL)resignFirstResponder
{
if (_isOpen == YES)
{
self.height -= kCPDatePickerTableViewCellPickerHeight;
[UIView animateWithDuration:kUIAnimationDuration animations:^{
_datePicker.alpha = 0.0f;
}];
[self.tableView beginUpdates];
[self.tableView endUpdates];
_isOpen = NO;
}
return [super resignFirstResponder];
}
- (id)value
{
return _datePicker.date;
}
- (void)setValue:(NSDate *)value
{
_datePicker.date = value;
_dateLabel.text = [_dateFormatter stringFromDate:_datePicker.date];
}
- (IBAction)datePickerValueChanged:(UIDatePicker *)sender
{
[_dateLabel setText:[_dateFormatter stringFromDate:_datePicker.date]];
[self.delegate tableViewCellDidChangeValue:self];
}
@end
컨트롤러가 보기에 이 두 가지 대리 방법을 구현합니다.
#pragma mark - UITableViewDelegate methods
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CPTableViewCell *cell = (CPTableViewCell *)[super tableView:tableView cellForRowAtIndexPath:indexPath];
return [cell height];
}
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
CPTableViewCell *cell = (CPTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
if ([cell canBecomeFirstResponder])
{
[cell becomeFirstResponder];
}
if (cell != _selectedCell)
{
[_selectedCell resignFirstResponder];
}
_selectedCell = cell;
return YES;
}
인터페이스 작성기에서 제약 조건을 설정하는 예
또한 UITextField 및 UITextView에 대한 사용자 지정 셀 클래스를 작성했습니다. 여기서 tableView:didSelectRowAtIndexPath:는 셀을 선택할 때 호출됩니다!
CPTextFieldTableCell 보기
//
// CPTextFieldTableViewCell.h
//
// Copyright (c) CodePigeon. All rights reserved.
//
#import "CPTableViewCell.h"
@interface CPTextFieldTableViewCell : CPTableViewCell
@property (nonatomic, weak) IBOutlet UITextField *inputTextField;
@end
//
// CPTextFieldTableViewCell.m
//
// Copyright (c) CodePigeon. All rights reserved.
//
#import "CPTextFieldTableViewCell.h"
@interface CPTextFieldTableViewCell () <UITextFieldDelegate>
@end
@implementation CPTextFieldTableViewCell
- (void)awakeFromNib
{
[super awakeFromNib];
self.selectionStyle = UITableViewCellSelectionStyleNone;
_inputTextField.userInteractionEnabled = NO;
_inputTextField.delegate = self;
}
- (BOOL)becomeFirstResponder
{
_inputTextField.userInteractionEnabled = YES;
[_inputTextField becomeFirstResponder];
return [super becomeFirstResponder];
}
- (BOOL)resignFirstResponder
{
_inputTextField.userInteractionEnabled = NO;
return [super resignFirstResponder];
}
- (void)setIsEnabled:(BOOL)isEnabled
{
[super setIsEnabled:isEnabled];
_inputTextField.enabled = isEnabled;
}
- (id)value
{
return _inputTextField.text;
}
- (void)setValue:(NSString *)value
{
_inputTextField.text = value;
}
#pragma mark - UITextFieldDelegate methods
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self.delegate tableViewCellDidChangeValue:self];
}
@end
CB 텍스트 뷰 테이블 뷰 셀
셀 높이는 동적이며 텍스트를 새 줄로 감쌀 때 행이 증가합니다!
//
// CBTextViewTableViewCell.h
//
// Copyright (c) CodePigeon. All rights reserved.
//
#import "CPTableViewCell.h"
@interface CPTextViewTableViewCell : CPTableViewCell
@property (nonatomic, weak) IBOutlet UITextView *inputTextView;
@end
//
// CBTextViewTableViewCell.m
//
// Copyright (c) CodePigeon. All rights reserved.
//
#import "CPTextViewTableViewCell.h"
@interface CPTextViewTableViewCell () <UITextViewDelegate>
{
UITextView *_heightTextView;
}
@end
@implementation CPTextViewTableViewCell
@synthesize height = _height;
- (void)awakeFromNib
{
[super awakeFromNib];
self.selectionStyle = UITableViewCellSelectionStyleNone;
_inputTextView.userInteractionEnabled = NO;
_inputTextView.delegate = self;
_inputTextView.contentInset = UIEdgeInsetsZero;
_inputTextView.scrollEnabled = NO;
}
- (CGFloat)height
{
if (!_heightTextView)
{
CGRect frame = (CGRect) {
.origin = CGPointMake(0.f, 0.f),
.size = CGSizeMake(_inputTextView.textInputView.frame.size.width, 0.f)
};
_heightTextView = [[UITextView alloc] initWithFrame:frame];
_heightTextView.font = [UIFont systemFontOfSize:_inputTextView.font.pointSize];
_heightTextView.textColor = UIColor.whiteColor;
_heightTextView.contentInset = UIEdgeInsetsZero;
}
_heightTextView.text = _inputTextView.text;
CGSize size = [_heightTextView sizeThatFits:CGSizeMake(_inputTextView.textInputView.frame.size.width, FLT_MAX)];
return size.height > _height ? size.height + _inputTextView.font.pointSize : _height;
}
- (BOOL)becomeFirstResponder
{
_inputTextView.userInteractionEnabled = YES;
[_inputTextView becomeFirstResponder];
return [super becomeFirstResponder];
}
- (BOOL)resignFirstResponder
{
_inputTextView.userInteractionEnabled = NO;
return [super resignFirstResponder];
}
- (void)setIsEnabled:(BOOL)isEnabled
{
[super setIsEnabled:isEnabled];
_inputTextView.editable = isEnabled;
}
- (id)value
{
return _inputTextView.text;
}
- (void)setValue:(NSString *)value
{
_inputTextView.text = value;
[_inputTextView setNeedsLayout];
[_inputTextView layoutIfNeeded];
}
#pragma mark - UITextViewDelegate methods
- (void)textViewDidChange:(UITextView *)textView
{
[self.delegate tableViewCellDidChangeValue:self];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
@end
Swift 버전에서 DateCell을 사용하는 가장 쉬운 방법은 다음과 같습니다.이 예를 사용합니다.
- 이 예제를 열고 테스트합니다(Make Xcode to Convert to Swift 2).
"DateCellTableViewController.swift" 클래스를 프로젝트로 끕니다.
"Main.storyboard"를 열고 "DateCell"을 복사하여 ViewController Object를 스토리보드에 붙여넣습니다.
언급URL : https://stackoverflow.com/questions/18973573/ios-7-how-to-display-a-date-picker-in-place-in-a-table-view
'programing' 카테고리의 다른 글
jQuery를 사용하여 인터넷 연결이 있는지 확인하시겠습니까? (0) | 2023.08.15 |
---|---|
엑셀에서 그룹별로 데이터를 계산하려면 어떻게 해야 합니까? (0) | 2023.08.15 |
I 프레임을 용기의 나머지 높이의 100%에 맞게 만듭니다. (0) | 2023.08.15 |
토네이도 웹 서버와 함께 장고를 어떻게 사용합니까? (0) | 2023.08.15 |
Less가 CSS calc() 속성을 컴파일하려는 것을 방지하는 방법은 무엇입니까? (0) | 2023.08.15 |