ver reproductor puedo poner para musixmatch musica letras letra internet gratis con como canciones automaticamente aplicacion ios iphone objective-c uitableview

ios - reproductor - iPhone UITableView. ¿Cómo enciende la lista alfabética de una sola letra como la aplicación de música?



no puedo ver letra de canciones en iphone (9)

Aquí hay una solución simple en Swift, suponiendo que tiene los encabezados de título en una matriz. Si no se pudo encontrar el título, devolverá el índice anterior en la matriz.

func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? { return "ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.flatMap{String($0)} } func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int { return self.headerTitles.filter{$0 <= title}.count - 1 }

En la aplicación de música de iPhone, seleccionar Artista, Canciones o Álbumes presenta una vista de tabla con una lista vertical de letras individuales en el lado derecho de la IU que permite el desplazamiento rápido. ¿Cómo habilito esta funcionalidad en mi aplicación?

Saludos, Doug


Aquí hay una versión modificada de la función de Kyle que maneja el caso de hacer clic en un índice para el que no tiene una cadena:

- (NSInteger)indexForFirstChar:(NSString *)character inArray:(NSArray *)array { char testChar = [character characterAtIndex:0]; __block int retIdx = 0; __block int lastIdx = 0; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { char firstChar = [obj characterAtIndex:0]; if (testChar == firstChar) { retIdx = idx; *stop = YES; } //if we overshot the target, just use whatever previous one was if (testChar < firstChar) { retIdx = lastIdx; *stop = YES; } lastIdx = idx; }]; return retIdx; }


Implemente los métodos de delegado -sectionIndexTitlesForTableView: y -tableView:sectionForSectionIndexTitle:atIndex:

Consulte la documentación UITableViewDataSource para obtener más información.


Otra cosa que debes tener en cuenta es localizar las secciones para cada idioma. Después de investigar un poco, encontré que UILocalizedIndexedCollation es bastante útil:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return [[[UILocalizedIndexedCollation currentCollation] sectionTitles] objectAtIndex:section]; } - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { return [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles]; } - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { return [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:index]; }

https://developer.apple.com/documentation/uikit/uilocalizedindexedcollation


Proporcione sus propios caracteres de índice:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { return[NSArray arrayWithObjects:@"a", @"e", @"i", @"m", @"p", nil]; }

y entonces:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { return <yourSectionIndexForTheSectionForSectionIndexTitle >; }

Necesitarás secciones.


Se me ocurrió un enfoque alternativo para manejar una sola lista de letras alfabéticas sin usar secciones. Es similar a la respuesta de Zaph, pero en lugar de obtener ningún valor al devolver un nuevo índice (ya que siempre tendremos 1 sección), calculamos el índice para la ubicación del primer elemento en la matriz que comienza con un cierto carácter, luego desplazamos lo.

La desventaja es que esto requiere buscar en la matriz cada vez (¿es esto absolutamente terrible?), Sin embargo, no noté ningún retraso o comportamiento lento en el simulador de iOS o en mi iPhone 4S.

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { return[NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil]; } - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { NSInteger newRow = [self indexForFirstChar:title inArray:self.yourStringArray]; NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:newRow inSection:0]; [tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; return index; } // Return the index for the location of the first item in an array that begins with a certain character - (NSInteger)indexForFirstChar:(NSString *)character inArray:(NSArray *)array { NSUInteger count = 0; for (NSString *str in array) { if ([str hasPrefix:character]) { return count; } count++; } return 0; }

agregar propiedad para almacenar el último índice seleccionado como

@property (assign, nonatomic) NSInteger previousSearchIndex;

y almacenar esta propiedad cada vez como:

- (NSInteger)indexForFirstChar:(NSString *)character inArray:(NSArray *)array { NSUInteger count = 0; for (NSString *str in array) { if ([str hasPrefix:character]) { self.previousSearchIndex = count; return count; } count++; } return self.previousSearchIndex; }

y actualizar el código scrollToRow como:

[tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

Haga este método aún mejor y con buena animación.


Si está utilizando un NSFetchedResultsController , puede hacer lo siguiente:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { return [frc sectionIndexTitles]; } - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { return [frc sectionForSectionIndexTitle:title atIndex:index]; }


Si usa MonoTouch, anule el método SectionIndexTitles (UITableView) en la clase UITableViewDataSource. Simplemente devuelve una serie de cadenas y la subclase se ocupa del resto.

class TableViewDataSource : UITableViewDataSource { public override string[] SectionIndexTitles(UITableView tableView) { return new string[] { /*your string values */}; } }

* solo una sugerencia para aquellos de nosotros que usamos C # y Mono (.NET) para escribir aplicaciones de iPhone. :)


Un grupo de personas preguntó si era posible hacer esto sin secciones. Quería lo mismo y encontré una solución que podría ser un poco turbia y no devuelve ningún valor a sectionForSectionIndexTitle, pero si se encuentra en una esquina y no quiere tener que hacer una sección para cada letra del alfabeto, esto es una solución segura Perdón por cualquier código Nazis por adelantado. :PAG

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { if (thisTableDataIsShowing) { NSMutableArray *charactersForSort = [[NSMutableArray alloc] init]; for (NSDictionary *item in d_itemsInTable) { if (![charactersForSort containsObject:[[item valueForKey:@"character_field_to_sort_by"] substringToIndex:1]]) { [charactersForSort addObject:[[item valueForKey:@"character_field_to_sort_by"] substringToIndex:1]]; } } return charactersForSort; } return nil; } - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { BOOL found = NO; NSInteger b = 0; for (NSDictionary *item in d_itemsInTable) { if ([[[item valueForKey:@"character_field_to_sort_by"] substringToIndex:1] isEqualToString:title]) if (!found) { [d_yourTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:b inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; found = YES; } b++; } }

Funciona muy bien si está obteniendo una gran cantidad de datos y seccionando que tomaría un montón de trabajo. :) Intenté usar variables genéricas para que supiera lo que estaba haciendo. d_itemsInTable es un NSArray de NSDictionaries que estoy enumerando en UITableView.