2015-03-19 5 views
6

मैं एक्सकोड के साथ आईओएस 8 ऐप पर काम कर रहा हूं। मुझे एक दृश्य में डेटा के कई कॉलम और पंक्तियों के साथ एक तालिका प्रदर्शित करने की आवश्यकता है।मैं एक्सकोड में एकाधिक कॉलम के साथ यूआई टेबल व्यू कैसे बना सकता हूं?

उदाहरण:

Name    Time In  Time Out  ETA 
Johnnys Supplies 8:30AM  9:00AM  10:15AM 
Franks Company  8:45AM  9:05AM  9:45AM 
Another Inc.  10:12AM  11:00AM  12:04PM 

सभी डेटा JSON/पीएचपी साथ में पढ़ कर दिया जाएगा।

मुझे इसे एक टेबलव्यू की तरह काम करने की आवश्यकता है जहां उपयोगकर्ता लंबवत स्क्रॉल कर सकता है, और एक अनुक्रमणिका का चयन कर सकता है। एक बार उस इंडेक्स का चयन करने के बाद, उपयोगकर्ता चयनित सेल (आदि) में डेटा के आधार पर अतिरिक्त प्रश्न चलाने के लिए एक बटन क्लिक कर सकता है।

इसे लागू करने का सबसे आसान तरीका क्या है? एक तरीका होना चाहिए कि xcode आपको इसे मूल रूप से करने की अनुमति देता है? क्या मैं कुछ भूल रहा हूँ?

सभी कोडिंग उदाहरणों का स्वागत है!

मैं दो विकल्प मिल गया है, लेकिन दोनों लाइसेंस फीस की आवश्यकता होती है:

http://www.ioscomponents.com/Home/IOSDataGrid < - $ 400

http://www.binpress.com/app/ios-data-grid-table-view/586 < - $ 130

किसी को भी इन घटकों से परिचित हैं?

+2

यदि आप 'UITableViewCell' subclass करते हैं, तो आप अपना खुद का आसानी से लिख सकते हैं। –

+0

खुद से पूछें कि आपको इसे स्वयं लागू करने की आवश्यकता होगी और अपनी प्रति घंटा दर से गुणा करें। यदि $ 130 या $ 400 से अधिक है, तो घटक खरीदें। ;-) – Krumelur

+1

UICollectionView का उपयोग करें। संदर्भ उदाहरण: http://www.appcoda.com/ios-programming-uicollectionview-tutorial/ – gagarwal

उत्तर

10

आईओएस तालिका दृश्य हमेशा एक ही स्तंभ होते हैं। मैक ओएस पर आप सीधे बना सकते हैं जो आप सीधे कर रहे हैं।

उस ने कहा, आप कस्टम टेबल व्यू सेल बना सकते हैं जो आपकी इच्छित सामग्री प्रदर्शित करते हैं। वास्तव में यह काफी आसान होगा। आप जो भी करेंगे, वह UITableViewCell को उपclass करना है और आप में से प्रत्येक कॉलम के लिए दृश्य (संभवतः UILabels) को परिभाषित करना है, फिर उन्हें सेल में आउटलेट गुणों के रूप में तारित करना है। फिर आपके द्वारा उपयोग किए जाने वाले सेल पहचानकर्ता के लिए उस सेल क्लास को पंजीकृत करने के लिए अपनी तालिका दृश्य को रगड़ें।

फिर आप अपने डेटा को विभिन्न आउटलेट गुणों में स्थापित करने के लिए अपना सेलफॉररोएट इंडेक्सपैथ विधि लिखते हैं।

आप एक यूआईसीओलेक्शन व्यू का भी उपयोग कर सकते हैं, लेकिन ऐसा लगता है कि कस्टम सेल के साथ एक तालिका दृश्य की तरह मुझे इस एप्लिकेशन के लिए बेहतर फिट है।

+0

क्या आप कुछ कोडिंग उदाहरण प्रदान करने में सक्षम हैं? मैंने इस प्रश्न को कभी भी स्टैक ओवरफ्लो पर उचित रूप से उत्तर नहीं दिया है और इस प्रश्न को समाप्त करना बहुत अच्छा होगा। –

+0

@FilipKorngut "आईओएस के लिए टेबल व्यू प्रोग्रामिंग गाइड" देखें और 'UITableView' के लिए दस्तावेज़ों में संदर्भित नमूना ऐप्स देखें। कई उदाहरण हैं कि कई लेबल वाले कस्टम सेल को कैसे बनाया जाए। – rmaddy

+0

क्या @rmaddy ने कहा। यह ऐप्पल, और दर्जनों और दर्जनों नमूना ऐप्स में अच्छी तरह से कवर किया गया है। –

9

एक दूसरे के बगल में दो कॉलम और दो लेबल के बीच क्या अंतर है? एक विभक्त?

enter image description here

इस एक बहु स्तंभ तालिका दृश्य है?

क्योंकि यह सामान्य UITableViewCell के साथ एक तालिकादृश्य है जिसमें 3 UILabels और 2 UIViews है। विचार 1 पीएक्स चौड़े होने के कारण डिवाइडर होने का नाटक करते हैं।

कोड स्वयं स्पष्टीकरण होना चाहिए।

@interface MultiColumnTableViewCell : UITableViewCell 
@property (strong, nonatomic) UILabel *label1; 
@property (strong, nonatomic) UILabel *label2; 
@property (strong, nonatomic) UILabel *label3; 
@end 

।मीटर

@interface MultiColumnTableViewCell() 
@property (strong, nonatomic) UIView *divider1; 
@property (strong, nonatomic) UIView *divider2; 
@end 

@implementation MultiColumnTableViewCell 

- (UILabel *)label { 
    UILabel *label = [[UILabel alloc] init]; 
    label.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.contentView addSubview:label]; 
    return label; 
} 

- (UIView *)divider { 
    UIView *view = [[UIView alloc] init]; 
    view.translatesAutoresizingMaskIntoConstraints = NO; 
    [view addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:1.0/[[UIScreen mainScreen] scale]]]; 
    view.backgroundColor = [UIColor lightGrayColor]; 
    [self.contentView addSubview:view]; 
    return view; 
} 

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    self.separatorInset = UIEdgeInsetsZero; 
    self.layoutMargins = UIEdgeInsetsZero; 
    self.preservesSuperviewLayoutMargins = NO; 

    self.divider1 = [self divider]; 
    self.divider2 = [self divider]; 

    self.label1 = [self label]; 
    self.label2 = [self label]; 
    self.label3 = [self label]; 

    NSDictionary *views = NSDictionaryOfVariableBindings(_label1, _label2, _label3, _divider1, _divider2); 

    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_label1]-2-[_divider1]-2-[_label2(==_label1)]-2-[_divider2]-2-[_label3(==_label1)]-5-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]; 
    [self.contentView addConstraints:constraints]; 

    NSArray *horizontalConstraints1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_divider1]|" options:0 metrics:nil views:views]; 
    [self.contentView addConstraints:horizontalConstraints1]; 
    NSArray *horizontalConstraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_divider2]|" options:0 metrics:nil views:views]; 
    [self.contentView addConstraints:horizontalConstraints2]; 

    return self; 
} 

@end 

TableViewController:

@implementation MasterViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.tableView registerClass:[MultiColumnTableViewCell class] forCellReuseIdentifier:@"Cell"]; 
    self.tableView.separatorColor = [UIColor lightGrayColor]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 10; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MultiColumnTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
    cell.label1.text = [NSString stringWithFormat:@"Name %ld", (long)indexPath.row]; 
    cell.label2.text = [NSString stringWithFormat:@"Start %ld", (long)indexPath.row]; 
    cell.label3.text = [NSString stringWithFormat:@"End %ld", (long)indexPath.row]; 
    return cell; 
} 

@end 
3

UICollectionView का प्रयोग करें, जाँच एप्पल WWDC 2012 सत्र

  • 205 का परिचय संग्रह दृश्य
  • 219 उन्नत संग्रह दृश्य और बिल्डिंग कस्टम लेआउट

https://developer.apple.com/videos/wwdc/2012/

संबंधित मुद्दे