Example with two text fields:
let fromDate = UITextField()
let toDate = UITextField()
let datePicker = UIDatePicker()
let dateFormatter = DateFormatter()
...
dateFormatter.dateFormat = "MM-dd-yyyy"
datePicker.datePickerMode = UIDatePicker.Mode.date
datePicker.addTarget(self, action: #selector(<YouViewController>.datePickerValueChanged(sender:)), for: UIControl.Event.valueChanged)
...
let date = Date()
fromDate.text = dateFormatter.string(from: date)
fromDate.textAlignment = NSTextAlignment.left
fromDate.inputView = datePicker
fromDate.delegate = self
let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 44))
let doneBtn = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(dateSelected))
let cancelBtn = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(dismissPicker))
toolbar.setItems([cancelBtn, doneBtn], animated: false)
fromDate.inputAccessoryView = toolbar
toDate.text = dateFormatter.string(from: date)
toDate.textAlignment = NSTextAlignment.left
toDate.inputView = datePicker
toDate.delegate = self
...
@objc func datePickerValueChanged(sender: AnyObject) {
if (fromDate.isFirstResponder) {
fromDate.text = dateFormatter.string(from: datePicker.date)
} else {
toDate.text = dateFormatter.string(from: datePicker.date)
}
}
// UITextFieldDelegate
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return false
}
jueves, 24 de noviembre de 2016
martes, 1 de noviembre de 2016
iOS: TableView row height given by image in ImageView
Objective C
[[Server sharedInstance] getItems:^(id response, NSError *error) {
[self hideActivityIndicator];
if (error) {
[self showErrorDialogWithMessage:error.localizedDescription];
} else {
self.items = ((NSArray<Item*>*)response).data;
self.itemsHeights = [[NSMutableArray alloc] initWithCapacity:self.items.count];
for (int i = 0; i < self.items.count; i++) {
[self.itemsHeights addObject:[NSNumber numberWithInt:160]];
}
if (self.items.count != 0) {
[self noResultsViewHidden:YES];
}
[self.tableView reloadData];
}
}];
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
Product* item = item = self.items[indexPath.row];
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
// Customize cell
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:item.picture]];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
__block UIImageView* imageViewRef = cell.itemImageView;
__block NSIndexPath *blockIndexPath = indexPath;
[cell.itemImageView cancelImageDownloadTask];
AFImageDownloader* downloader = [UIImageView sharedImageDownloader];
UIImage *cachedImage = [downloader.imageCache imageforRequest:request withAdditionalIdentifier:nil];
if (cachedImage) {
cell.productImageView.image = cachedImage;
long height = cell.frame.size.width * cachedImage.size.height / cachedImage.size.width;
[self.itemsHeights setObject:[NSNumber numberWithLong:height] atIndexedSubscript:blockIndexPath.row];
} else {
[cell.productImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull image) {
long height = cell.frame.size.width * image.size.height / image.size.width;
[self.itemsHeights setObject:[NSNumber numberWithLong:height] atIndexedSubscript:blockIndexPath.row];
float scale = image.size.width / self.tableView.frame.size.width;
UIImage* scaledImage = [UIImage imageWithCGImage:image.CGImage scale:image.scale * scale orientation:image.imageOrientation];
dispatch_async(dispatch_get_main_queue(), ^{
imageViewRef.image = scaledImage;
if ([self.tableView.indexPathsForVisibleRows containsObject:blockIndexPath]) {
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}
});
} failure:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, NSError * _Nonnull error) {
imageViewRef.image = nil;
}];
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
return self.itemsHeights[indexPath.row].longValue;
}
Suscribirse a:
Entradas (Atom)